我完全按照面向对象的模式进行编程,下面的代码是用户登录的函数,其中的$conn 是通过一个数据库连接类返回的mysqli连接,不知道为什么总是报错:Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in D:\Web\Myjob\classes\class.operation.php on line 53
class Operation{
private $conn ; function __construct(){
$obj = new MysqlConn();
$this->conn =$obj->getConnection();
} public function login($username, $password) {
$sql = "select * from " . DB_PRE . "employee as ep where ep.username='$username' and ep.password='" . self::md5fun ( $password )."'";
$result = $this->conn->query($sql);
$count = $result->num_rows;
$result->close ();
if ($count == 1) {
setcookie ( "username", $username, EXPIRE );
$query = "update " . DB_PRE . "employee ep set ep.lastlog = ? where ep.username=?";
$stmt = $this->conn->prepare ( $query );
$date = date("Y-m-d H:m:s");
$stmt->bind_param ( "ss", $date, $username );
$stmt->execute ();
$stmt->close ();
return true;
}
return false;

}
下面这段代码是我另外写的,测试数据库连接类是否正确,显示结果未出现异常:
$opt = new MysqlConn();
$conn = $opt->getConnection();
$username ='12345678';
$password = '16C22456CB1BA55766D69C51B9E03414';
$sql = "select * from " . DB_PRE . "employee as ep where ep.username='$username' and ep.password='" .$password."'";if ($result = $conn->query($sql)) {
    printf("Select returned %d rows.\n", $result->num_rows);
    $result->close();
}

解决方案 »

  1.   

    唉,没人回答啊
    搞了一天还是我自己搞定了
    我用XDebug调试时找到了问题的所在。问题出在Operation类的构造函数上,当前错误流程是这样的:
    new 一个Operation -> 调用构造函数(同时getConnection)(由于在构造函数中没有使用这个conn,于是马上就自动调用了MysqlConn类的析构函数,当执行login函数时,由于conn已经关闭,所以就报错了!)所以解决这个问题的方法就是在具体函数中再调用getConnection