我在使用数据库函数的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() 函数?
谢谢。
这是 le 修复
将此函数添加到数据库类:
public static function getConnection()
{
self::getInstance();
return self::$conn;
}
将每个mysql_real_escape_string(替换为mysqli_real_escape_string(Database::getConnection(),
我认为问题是您正在使用mysql_real_escape_string()
.
那是来自与mysqli
不同的库,也许这就是没有连接的原因?
从 PHP 手册的mysql_real_escape_string
页:
字符串mysql_real_escape_string (字符串 $unescaped_字符串 [, 资源 $link标识符 = 空 ] )
这是第二个参数的定义,$link_identifier
。
MySQL 连接。如果未指定链接标识符,则 假设由 mysql_connect() 打开的最后一个链接。如果没有这样的链接 找到,它将尝试创建一个,就好像 mysql_connect() 被调用一样 没有参数。如果未找到或建立连接,则E_WARNING 生成级别错误。
一个可能但有点丑陋的解决方案是,只需在数据库单例中的 mysqli 实例上向 real_escape_string 方法添加一个包装器。
public function escapeString($value){
return $this->conn->real_escape_string($value);
}
另一种选择可能是使用 mysqli 库的过程版本(虽然,我实际上还没有尝试过是否可以混合两者,但我认为你可以): mysqli_real_escape_string