为什么我不能让mysql_real_escape_string
工作时使用PDO?当使用
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:pathherefile.php on line 44
我现在甚至使用根用户进行测试,但它仍然不能工作
大多数mysql_*函数使用mysql连接资源。正如该函数的文档所提到的,它实际上需要一个mysql_connect()资源,由于您使用的是PDO,因此在代码中不可用。
然而,解决方案是不使用这个函数,如果你想确保你的SQL是安全的。您可以在SQL查询中使用参数,创建一个准备好的语句,然后执行它。此解决方案使用PDO方式运行查询,并且同样安全。
更新:
如果您只需要使用PDO对SQL进行字符串转义,则可以使用PDO对象的quote()方法。然而,这样做并不是一项常见的任务。大多数情况下,当您希望为SQL查询转义字符串时,您实际上希望运行该查询。如果是文档本身所建议的情况,您最好使用PDO对象的prepare()方法。您可以阅读PDO预处理语句文档的示例部分以获取更多信息。