mysqli无法获取数据库?

时间:2012-11-17 22:35:50

标签: php

显然我的数据库功能无法获取数据库?

警告: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 "";
}

在调用会话管理功能之前正在启动数据库。

1 个答案:

答案 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()