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.
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.
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
.
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 users
OÙ fname
= 'Robert') ; DROP TABLE students;--' AND lname
= "Smith SELECT FROM users
OÙ fname
= 'Robert\') ; DROP TABLE students;--' AND lname
= "Smith
EDIT : j'ai oublié le lien xkcd http://xkcd.com/327/
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.