显然我的数据库功能无法获取数据库?
警告:mysqli :: real_escape_string():无法获取数据库
我创建了一个扩展MySQLi的自定义数据库类。
以下是我如何构建它。
public function __construct(){
$db = new mysqli(
DB_HOST, DB_USER, DB_PASS, DB_NAME);
$db->select_db(DB_NAME);
return $db;
}
我正在选择数据库,不是吗?
发生这种情况的代码在这里:
private static function readSession($sessionId)
{
global $database;
$sessionId = session_id();
$sessionId = $database->real_escape_string($sessionId);
$time = time();
$result = $database->query("SELECT sessiondata FROM sessions WHERE sessionid='$sessionId' AND expiry > $time");
if ($result->num_rows > 0) {
$row = $result->fetch_array();
return $row['sessiondata'];
}
return "";
}
在调用会话管理功能之前正在启动数据库。
答案 0 :(得分:3)
你说你的自定义类扩展了mysqli。如果是这种情况,您需要在扩展构造函数中调用mysqli __construct()
,而不返回任何内容:
class YourDatabase extends mysqli {
public function __construct() {
// Call the mysqli constructor explictly
parent::__construct(DB_HOST, DB_USER, DB_PASS, DB_NAME);
// No need to call select_db() again, since default db was selected in the
// parent constructor
// Don't return anything
// the constructor returns $this, which extends mysqli
return;
}
}
// Use as:
$database = new YourClass();
$database->query("SELECT * FROM atable");
扩展类意味着您正在使用父类的后代。您不需要实例化父类的实例,但如果您需要使用其构造函数并扩展其功能,则必须在子类的parent::__construct(...)
中显式调用__construct()
。