繁体   English   中英

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

[英]Access denied error when using 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

好点?

再次感谢您的帮助。

问题是您已使用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...;
}

你正在混合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);

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

解:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM