MySQL-Queries in PHP sichern

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.