使用mysql_real_escape_string()时访问被拒绝错误

时间:2012-03-02 09:51:52

标签: php mysql mysql-real-escape-string

我正在尝试在进入我的数据库之前逃避一些数据,但我不断收到此错误:

Warning: mysql_real_escape_string(): Access denied for user 

现在这通常表明我没有连接到数据库(它也说明(使用密码:NO))。

我对此感到有点困惑,因为当连接到数据库时,我有一个'die'子句,所以如果连接失败,我会被告知。所以我通过在同一个函数中运行一个简单的查询来测试这个理论,我试图逃避数据,它运行得很好。

那么为什么地球上的转义方法不起作用或者没有连接到数据库。我注意到错误状态的用户不是我用来访问数据库的用户,例如'www-data @ localhost'。可能是尝试使用其他用户登录,如果是这样,为什么以及如何?因为我的网站的另一个区域,转义功能工作正常,我没有做任何特别的工作,只是将代码添加到我的网页。

感谢您的帮助。

还有其他方法可以清理我的代码吗?

好的,所以我们在这里,当用户提交表单时,我使用AJAX收集数据并将其放入obj以发布(JSON编码)它到第一个PHP脚本,在这里:

http://codepad.org/kGPljN4I

此脚本检查所有数据,然后调用函数将其添加到数据库

调用这个Mysql类来转义数据,然后向数据库中添加一条新记录,当该类和实例建立时,它会建立与数据库的连接:

http://codepad.org/wwGNrTJm

第三个文件用于常量,它保​​存数据库的信息,如pass,user等:

http://codepad.org/dl0QQbi9

更好吗?

再次感谢您的帮助。

3 个答案:

答案 0 :(得分:9)

问题是您已使用MySQLi建立了连接,但正在调用mysql_real_escape_string()。您打算在程序上下文或面向对象的上下文中调用mysqli_real_escape_string()

class Mysql 
{
    private $conn;

    function __construct() 
    {

        $this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or 
                      die('No Connection to database!');
    }

    function add_non_member($data) 
    {
        $email = $data->email;

            // Procedural call
            $san_email = mysqli_real_escape_string($this->conn, $email);

            // Or OO call (recommended)
            $san_email = $this->conn->real_escape_string($email);

                // etc...
        }

  // etc...;
}

答案 1 :(得分:3)

你正在混合ext / mysqli

$this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME

使用ext / mysql函数:

$san_email = mysql_real_escape_string($email);

最后一行应该是

$san_email = $this->conn->real_escape_string($email);

答案 2 :(得分:0)

我也获得了此拒绝访问警告,我能够找到解决方案。问题是我在调用mysql_real_escape_string函数之前没有设置mysql数据库连接。

解决方案:

  • 首先调用mysql_connect($ host,$ user,$ password)(或者你可以调用数据库连接函数)
  • 然后使用mysql_real_escape_string($ var)
相关问题