【发布时间】:2012-04-21 17:20:54
【问题描述】:
我在使用数据库函数的 php 页面上收到以下错误:
警告:mysql_real_escape_string() [function.mysql-real-escape-string]:用户访问被拒绝 'apache'@'localhost'
我知道我必须与我的数据库建立有效的连接,但这是“问题”。连接到我的数据库的类如下所示:
class Database
{
private static $instance = null;
private static $conn;
private function __construct()
{
try {
self::$conn = new mysqli('localhost', 'root', 'user', 'database');
} catch (Exception $ex) {
$errorpager = new CustomPageGenerator();
$errorpager->generateErrorPage("Connection to database failed. Please try again later.");
}
}
public static function getInstance()
{
try {
if (self::$instance == null) {
self::$instance = new Database();
}
return self::$instance;
} catch (Exception $ex) {
$errorpager = new CustomPageGenerator();
$errorpager->generateErrorPage("Connection to database failed. Please try again later.");
return false;
}
}
public function query($sql)
{
try {
return self::$conn->query($sql);
} catch (Exception $ex) {
$errorpager = new CustomPageGenerator();
$errorpager->generateErrorPage("Connection to database failed. Please try again later.");
return false;
}
}
}
如您所见,我为此使用了单例模式。但即使我放了一个
Database::getInstance();
在我的代码一开始打开连接时,我不断收到此错误。如何正确打开连接以便可以使用 mysql_real_escape_string() 函数?
谢谢。
这里是修复
在数据库类中添加了这个函数:
public static function getConnection()
{
self::getInstance();
return self::$conn;
}
将每一个 mysql_real_escape_string( 替换为 mysqli_real_escape_string(Database::getConnection(),
【问题讨论】:
-
首先
mysqli的函数调用中缺少),表示没有建立与数据库的连接。使用new mysqli('localhost', 'root', 'user', 'database');连接到数据库时是否遇到任何错误 -
是的,那是因为我“审查”了我的真实用户名和密码并意外删除了一个 )。修复了该错误。
-
使用
new mysqli('localhost', 'root', 'user', 'database');连接数据库时是否遇到任何错误? -
不。奇怪的是:例如,我有一个向我的网站注册新用户的功能。我可以填写注册表,按下注册按钮,然后获取这些错误的列表。但是当我用 phpmyadmin 查看我的数据库时,有一个新行,但所有列都是空的。
-
Mysqli和Mysql使用可能是问题的不同连接。使用mysqli连接数据库时,不能使用mysql_real_escape_string()。