调用mysql_real_escape_string()时出现“拒绝访问”错误

时间:2011-11-28 05:48:06

标签: mysql pdo

为什么我在使用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用户进行测试,但它仍然无效。

1 个答案:

答案 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的示例部分以获取更多信息。