![](/img/trans.png)
[英]mysql_real_escape_string(): Access denied in codeigniter
[英]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脚本,在这里:
此脚本检查所有数据,然后调用函数将其添加到数据库
调用这个Mysql类来转义数据,然后向数据库中添加一条新记录,当它和类的实例建立时,它会建立与数据库的连接:
第三个文件用于常量,它保存数据库的信息,如pass,user等:
好点?
再次感谢您的帮助。
问题是您已使用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数据库连接。
解:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.