【问题标题】:Access denied error when using mysql_real_escape_string()使用 mysql_real_escape_string() 时访问被拒绝错误
【发布时间】:2012-03-02 09:51:51
【问题描述】:

我正在尝试在某些数据进入我的数据库之前对其进行转义,但我不断收到此错误:

Warning: mysql_real_escape_string(): Access denied for user 

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

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

那么为什么逃生方法不能工作或无法连接到数据库。我确实注意到错误状态的用户不是我用来访问数据库的用户,它类似于“www-data@localhost”。是否尝试使用其他用户登录,如果是,为什么以及如何登录?因为我网站的另一个区域,转义功能工作得很好,我没有做任何特别的事情来使它工作,只是将代码添加到我的网页中。

感谢您的帮助。

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

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

http://codepad.org/kGPljN4I

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

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

http://codepad.org/wwGNrTJm

第三个文件是常量,它保​​存了数据库的信息,如密码、用户等:

http://codepad.org/dl0QQbi9

好些了吗?

再次感谢您的帮助。

【问题讨论】:

  • 您似乎正在尝试在打开连接之前调用该功能。也许在您网站的其他工作区域中,您已经打开了连接..?
  • @bububaba 好吧,我对此进行了测试,我评论了转义数据的代码,并让代码运行了一个简单的 SELECT 查询,该查询返回的数据很好,因此我连接到了数据库。这就是它的奇怪之处。
  • 使用错误中给出的用户名检查脚本中的 mysql_connect()。很可能,您在一开始就在某个地方提供了错误的凭据。
  • 我认为现在可以肯定地说我们需要更多代码来提供帮助

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


【解决方案1】:

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

【讨论】:

  • OHHHHHHHHHHHHHHHHH 伙计,我完全看错了!我一直在拔头发!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我也收到了拒绝访问的警告,我找到了解决方案。问题是我在调用mysql_real_escape_string函数之前没有设置mysql db连接。

    解决方案:

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

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      相关资源
      最近更新 更多