Почему вы хотите использовать подготовленное заявление?
Если SQL-инъекция вас интересует, вы всегда можете свернуть свою собственную:
$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()
Вывод:
ВЫБРАТЬ ИЗ users
ГДЕ fname
= 'Роберт'); DROP TABLE студенты; - 'И lname
=' Смит '
ВЫБРАТЬ ИЗ users
ГДЕ fname
= 'Роберт \'); DROP TABLE студенты; - 'И lname
=' Смит '
РЕДАКТИРОВАТЬ: забыл ссылку xkcd http://xkcd.com/327/