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

rag*_*nny 4 php mysql mysql-real-escape-string

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

Warning: mysql_real_escape_string(): Access denied for user 
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢您的帮助.

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

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

http://codepad.org/kGPljN4I

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

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

http://codepad.org/wwGNrTJm

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

http://codepad.org/dl0QQbi9

好点?

再次感谢您的帮助.

Mic*_*ski 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...;
}
Run Code Online (Sandbox Code Playgroud)