MySQLi PHP扩展问题

时间:2011-06-16 19:46:21

标签: php mysql mysqli

我是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

1 个答案:

答案 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 - 查询)。