我是MySQLi扩展的新手,我遇到了一个问题。每当查询完成执行时,我知道你应该释放结果。这是我为运行简单查询而构建的类的片段。有人能告诉我哪里出错了吗?正确输入后,查询将成功运行。只是我的页面不会像它那样重新加载,但它会给我这些错误......
Fatal error: Call to a member function free() on a non-object in <file> on <line>
......而且这个错误......
Fatal error: Call to a member function close() on a non-object in <file> on <line>
这是我的代码的简化版本:
... More code ...
public function query($query) {
try {
if ($result = $this->connection->query($query, MYSQLI_USE_RESULT)) {
$result->free(); //Problems here
$result->close(); //Problems here
return $result;
} else {
$result->free(); //Problems here
$result->close(); //Problems here
throw new Exception("The query was invalid");
}
} catch (Exception $e) {
die($e->getMessage());
}
}
... More code ...
我想避免使用程序样式,因为这是一个OOP应用程序。
感谢您的时间。
P.S。:上面的代码示例遵循与此页面上第一个示例类似的模式:http://www.php.net/manual/en/mysqli.query.php
答案 0 :(得分:5)
如果我按照您的手册链接,会提到有关返回值的内容
失败时返回FALSE。对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询,mysqli_query()将返回一个结果对象。对于其他成功的查询,mysqli_query()将返回TRUE。
特别是您不处理两个案例true
和更重要的false
if ($result = $this->connection->query($query, MYSQLI_USE_RESULT)) {
$result->free(); // Probably call "free()" on true
$result->close();
return $result;
} else { // <-- false, null, 0 or ""
$result->free(); // Probably call "free()" on false
$result->close();
throw new Exception("The query was invalid");
}
我不知道,$query
在您的情况下是什么,但query()
只返回结果,如果只有一个(SELECT
- 查询)。