如何检查mysqli_object是否已被释放?

时间:2014-05-16 12:50:43

标签: php mysqli

我需要检查mysqli_result是否已被释放。

使用Ext/Mysql函数,您可以使用函数is_resource

执行此操作

我试过检查$ result是否为mysqli_result,但是被释放后$ result仍然是mysqli_result对象

$db = mysqli_connect("myhost", "myuser", "mypass", "mydb");
$result = $db->query("SELECT * FROM mytable");
$result->free();
var_dump(is_a($result, "mysqli_result")); // => true, it is even if freed

3 个答案:

答案 0 :(得分:1)

释放mysqli_result后,其num_rows属性ist设置为NULL。

如果您选中它,php会发出警告

  

PHP警告:无法获取mysqli_result

由于您知道这不是错误,因此可以使用@忽略它。

function isFreed(mysqli_result $result) {
    return @($result->num_rows === NULL);
}

答案 1 :(得分:0)

不能将它包装在某个函数或方法中吗?

Class Result
{
    private $result;

    public function __construct(mysqli_result $result) {
        $this->result = $result;
    }

    public function getResult() {
        return $this->result;
    }

    public function free() {
        $this->result->free();
        $this->result = null;
    }

    public function __destruct() {
        $this->free();
    }
}

答案 2 :(得分:-1)

如果是

的结果,您可以检查
$result->free()

返回true,因为如果它返回false,则失败。

这对于检查是否足够?