Php 使用mysql\u real\u escape\u string()时出现拒绝访问错误

Php 使用mysql\u real\u escape\u string()时出现拒绝访问错误,php,mysql,mysql-real-escape-string,Php,Mysql,Mysql Real Escape String,我正在尝试在数据进入数据库之前转义一些数据,但我一直遇到以下错误: Warning: mysql_real_escape_string(): Access denied for user 现在,这通常表明我没有连接到数据库(它还声明(使用密码:NO)) 我对此有点困惑,因为当连接到数据库时,我有一个'die'子句,所以如果它无法连接,我会被告知它。因此,我通过在我试图转义数据的同一个函数中运行一个简单的查询来测试这一理论,它工作得很好 那么,究竟为什么escape方法不起作用或无法连接到数据

我正在尝试在数据进入数据库之前转义一些数据,但我一直遇到以下错误:

Warning: mysql_real_escape_string(): Access denied for user 
现在,这通常表明我没有连接到数据库(它还声明(使用密码:NO))

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

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

谢谢你的帮助

有没有其他方法来清理我的代码

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

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

调用此Mysql类是为了转义数据,然后向数据库添加新记录,当创建该类的实例时,它会与数据库建立连接:

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

更好吗


再次感谢您的帮助。

问题是,您已经使用
MySQLi
建立了连接,但是正在调用
mysql\u real\u escape\u 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\u real\u escape\u string函数之前,我没有设置mysql db连接

解决方案:

  • 首先调用mysql\u connect($host、$user、$password)(或者可以调用数据库连接函数)
  • 然后使用mysql\u real\u escape\u字符串($var)

您似乎试图在打开连接之前调用函数。也许在你网站的另一个区域,你已经打开了连接。@bububaba我测试过了,我对转义数据的代码进行了注释,并将代码用于运行一个简单的SELECT查询,该查询返回的数据很好,因此我连接到了数据库。这就是它的奇怪之处。使用错误中给出的用户名检查脚本中的mysql_connect()。最有可能的是,你在一开始的某个地方给出了错误的凭据。我想现在可以肯定地说,我们需要更多的代码来帮助哦,哦,哦,我完全忽略了这一点!我一直在拔头发!