4 votes

Déclaration préparée avec PHP et MySQL sans utiliser mysqli

J'aimerais savoir s'il est possible de créer une instruction préparée avec PHP et MySQL en utilisant la bibliothèque mysql plutôt que la bibliothèque mysqli.

Je ne trouve rien dans la documentation PHP.

Merci.

6voto

ax. Points 22269

La documentation PHP indique très clairement (à la fin de cette page) que les mysql extension fait no soutenir les déclarations préparées. Une alternative à mysqli qui soutient les déclarations préparées serait PDO_MYSQL .

3voto

Haim Evgi Points 40786

-1voto

jckdnk111 Points 753

Pourquoi voulez-vous utiliser une déclaration préparée ?

Si l'injection SQL vous préoccupe, vous pouvez toujours créer votre propre système :

$fname = "Robert'); DROP TABLE students;--";
$lname = "Smith";

$pureSql = "SELECT FROM `users` WHERE `fname` = '$fname'   AND `lname` = '$lname'";
$prepSql = "SELECT FROM `users` WHERE `fname` = :userfname AND `lname` = :userlname";

echo $pureSql, "\n";
echo prepare($prepSql, array('userfname' => $fname, 'userlname' => $lname)), "\n";

function prepare($sql, $params=array()){

    if(strlen($sql) < 2 || count($params) < 1){
        return $sql;
    }

    preg_match_all('/\:[a-zA-Z0-9]+/', $sql, $matches);

    $safeSql = $sql;
    foreach($matches[0] as $arg){
        if(array_key_exists(ltrim($arg, ':'), $params)){
            $safeSql = str_replace($arg, "'" . mysql_real_escape_string($params[ltrim($arg, ':')]) . "'", $safeSql);
        }
    }

    return $safeSql;

} //prepare()

La sortie est :

SELECT FROM usersfname = 'Robert') ; DROP TABLE students;--' AND lname = "Smith SELECT FROM usersfname = 'Robert\') ; DROP TABLE students;--' AND lname = "Smith

EDIT : j'ai oublié le lien xkcd http://xkcd.com/327/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X