Bu mysql kütüphane yerine mysqli kütüphanesini kullanarak PHP ve MySQL ile hazırlanmış bir açıklama oluşturmak için mümkün olup olmadığını bilmek istiyorum.
Ben PHP belgelerine şey bulamıyorum.
Teşekkürler.
mysql
uzantısı does not hazırlanmış deyimleri destekleyen (o sayfanın sonunda) PHP belgelerine quite clearly states. Alternatif mysqli
that supports prepared statements would be PDO_MYSQL
a>.
Neden Hazırlanan Açıklama kullanmak istiyor musunuz?
SQL enjeksiyonu sizin endişe ise her zaman kendi rulo olabilir:
$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()
Çıktı:
SELECT FROM users
WHERE fname
= 'Robert'); DROP TABLE students;--' AND lname
= 'Smith'
SELECT FROM users
WHERE fname
= 'Robert\'); DROP TABLE students;--' AND lname
= 'Smith'
EDIT: Xkcd link http://xkcd.com/327/ unuttum