我正在尝试在进入我的数据库之前逃避一些数据,但我不断收到此错误:
Warning: mysql_real_escape_string(): Access denied for user
现在这通常表明我没有连接到数据库(它也说明(使用密码:NO))。
我对此感到有点困惑,因为当连接到数据库时,我有一个'die'子句,所以如果连接失败,我会被告知。所以我通过在同一个函数中运行一个简单的查询来测试这个理论,我试图逃避数据,它运行得很好。
那么为什么地球上的转义方法不起作用或者没有连接到数据库。我注意到错误状态的用户不是我用来访问数据库的用户,例如'www-data @ localhost'。可能是尝试使用其他用户登录,如果是这样,为什么以及如何?因为我的网站的另一个区域,转义功能工作正常,我没有做任何特别的工作,只是将代码添加到我的网页。
感谢您的帮助。
还有其他方法可以清理我的代码吗?
好的,所以我们在这里,当用户提交表单时,我使用AJAX收集数据并将其放入obj以发布(JSON编码)它到第一个PHP脚本,在这里:
此脚本检查所有数据,然后调用函数将其添加到数据库
调用这个Mysql类来转义数据,然后向数据库中添加一条新记录,当该类和实例建立时,它会建立与数据库的连接:
第三个文件用于常量,它保存数据库的信息,如pass,user等:
更好吗?
再次感谢您的帮助。
答案 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数据库连接。
解决方案: