这个错误让我很恼火。我一直mysqli::query(): Couldn't fetch database
在进行mysqli查询。
这是我的mysqli扩展类(database.php):
class database extends mysqli {
private $host;
private $username;
private $password;
private $database;
private $name;
private $connected;
public $status;
public function __construct( $param ) {
$this->host = $param['host'];
$this->username = $param['username'];
$this->password = $param['password'];
$this->database = $param['name'];
@parent::__construct( $this->host, $this->username, $this->password, $this->database );
$this->status = ($this->connect_errno) ? "Not Connected ( Because of Error )" : "Connected";
$this->connected = ($this->connect_errno) ? false : true;
}
public function stop() {
if( $this->connected ) { $this->close(); }
$this->status = "Not Connected ( Manually Disconnected )";
}
}
这是我使用查询(sessions.php)的地方:
class session {
private $db;
public function __construct( $db ) {
$this->db = $db;
}
function open() {
return true;
}
function close() {
return true;
}
function read( $id ) {
$sql = "SELECT * FROM sessions WHERE sessionid = '{$id}'";
$sqlq = $this->db->query( $sql );
if( $sqlq ) { $row = $sqlq->fetch_assoc(); return $row['data']; }
else { return ''; }
}
function write( $id, $data ) {
$now = time();
$sql = "SELECT * FROM sessions WHERE sessionid = '{$id}'";
$sqlq = $this->db->query( $sql ); // HERE I GET THE ERROR
if( ( $sqlq ) && ( $sqlq->num_rows == 1 ) ) { $sql = "UPDATE sessions SET data = '{$data}', updated = {$now} WHERE sessionid = '{$id}'"; return $this->db->query( $sql ); }
else { $sql = "INSERT INTO sessions ( sessionid, updated, data ) VALUES ( '{$id}', {$now}, '{$data}' )"; return $this->db->query( $sql ); }
}
function destroy( $id ) {
return $this->db->delete( "FROM sessions WHERE sessionid = '{$id}'" );
}
function clean( $max ) {
$old = time() - $max;
return $this->db->delete( "FROM sessions WHERE updated < {$old}" );
}
}
这就是我在主文件(main.php)中使用它们的方式:
<?
$params = array();
$params['host'] = XXXXXXXXXXXXX;
$params['username'] = XXXXXXXXXXXXX;
$params['password'] = XXXXXXXXXXXXX;
$params['name'] = XXXXXXXXXXXXX;
include("database.php");
include("sessions.php");
$db = new database( $params );
$session = new session( $db );
session_set_save_handler( array($session, "open"), array($session, "close"), array($session, "read"), array($session, "write"), array($session, "destroy"), array($session, "clean") );
session_start();
?>
本read function
应工作正常,但write function
不会与相同的连接工作。
最好的方法是在特定于类本身的会话对象内创建连接。
将会是这样的:
class session {
private $db;
public function __construct( $params ) {
$this->db = new database( $params );
}
.
.
.
}
然后像这样创建您的会话对象:
$session = new session( $params );
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句