Da es immer wieder Probleme mit SQL-Injections kommt, habe ich hier eine recht einfache Lösung, die ausreichend für die Absicherung von MySQL-Queries sein sollte.
function mysql_queryf()
{
$args = func_get_args();
$query = array_shift($args);
$args = array_map('mysql_real_escape_string', $args);
$query = vsprintf($query, $args);
return mysql_query($query);
}
Benutzt wird das ganze dann so. Es muss nur darauf geachtet werden, das sich im ersten Parameter, dem Query die entsprechenden Platzhalter benutzt werden.
mysql_queryf("
INSERT INTO
guestbook(title, description, created)
VALUES
('%s', '%s', NOW());",
$title,
$description
);
Es werden die üblichen Platzhalter von sprintf wie %s für String, %d für einen signed Integer, %u für einen unsigned Integer oder %F (nicht %f) für einen Float benutzt. Der Vorteil ist, dass die Platzhalter einen Query evtl etwas übersichtlicher machen, da sich nicht mehr soviele Anführungszeichen und PHP-Funktionen zum sichern der Variablen im Query befinden und zusätzlich wird jede Variable automatisch für die Datenbank escaped.
Die Funktionen addslashes(), str_replace(), preg_replace() usw. sind nicht zum Absichern von Queries geeignet.