为什么我在使用PDO时无法让mysql_real_escape_string
工作?我在使用
try {
include "connect_to_db.php";
$sql = sprintf("NULL, '%s'",
mysql_real_escape_string('Woot')
);
$count = $dbh->exec($sql);
$dbh = null;
}
catch(PDOException $e){
echo $e->getMessage();
}
错误始终指向mysql_real_escape_string为
的行Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in D:\pathhere\file.php on line 44
我甚至现在使用root用户进行测试,但它仍然无效。
答案 0 :(得分:3)
大多数mysql_ *函数都使用mysql连接资源。作为函数的documentation,它实际上需要一个mysql_connect()资源,由于您使用的是PDO,因此该资源在您的代码中不可用。
但是,如果要确保SQL安全,则解决方案不使用此功能。您可以在SQL查询中使用参数create a prepared statement,然后执行它。此解决方案使用PDO方式运行查询,并且安全。
<强>更新强>
如果您只需要使用PDO为SQL转义字符串,则可以使用quote() method of the PDO object。但是,这不是一项常见的任务。大多数情况下,当您希望为SQL查询转义字符串时,实际上您希望运行查询。如果文档本身就是这种情况,那么最好使用prepare() method of the PDO object。您可以阅读PDO prepared statements documentation的示例部分以获取更多信息。