我想知道是否可以使用mysql库而不是mysqli库在PHP和MySQL中创建一个预处理语句。
我在PHP文档中找不到相关内容。
谢谢。
我在PHP文档中找不到相关内容。
谢谢。
为什么要使用预处理语句?
如果您担心 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()
输出结果为:
SELECT FROM users
WHERE fname
= 'Robert'); DROP TABLE students;--' AND lname
= 'Smith'
SELECT FROM users
WHERE fname
= 'Robert\'); DROP TABLE students;--' AND lname
= 'Smith'
编辑:忘记了xkcd链接 http://xkcd.com/327/
1
)被引用为('1'
),这可能会导致严格 SQL 的问题)。我猜编写一个无错误的prepare()
并不是那么容易。 - ax.