MySQLi PHP扩展问题

Oli*_*ryn 0 php mysql mysqli

我是MySQLi扩展的新手,我遇到了一个问题.每当查询完成执行时,我知道你应该释放结果.这是我为运行简单查询而构建的类的片段.有人能告诉我哪里出错了吗?正确输入后,查询将成功运行.这只是我的页面不会像它一样重新加载,但它会给我这些错误......

Fatal error: Call to a member function free() on a non-object in <file> on <line>
Run Code Online (Sandbox Code Playgroud)

......而且这个错误......

Fatal error: Call to a member function close() on a non-object in <file> on <line>
Run Code Online (Sandbox Code Playgroud)

这是我的代码的简化版本:

... 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 ...
Run Code Online (Sandbox Code Playgroud)

我想避免使用程序样式,因为这是一个OOP应用程序.

感谢您的时间.

PS:上面的代码示例遵循与此页面上第一个示例类似的模式:http://www.php.net/manual/en/mysqli.query.php

Kin*_*nch 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");
}
Run Code Online (Sandbox Code Playgroud)

我不知道,$query在你的情况下是什么,但query()只返回一个结果,如果有一个(SELECT-query).

  • `is_object()`,或只是测试布尔值`=== true`,或`=== false` (3认同)