MySQLi PHP扩展问题

I am new to the MySQLi extension, and I have run into a problem. Whenever a query finishes executing, I know you should free the result. Here is a snippet of a class I built for running a simple query. Could someone tell me where I went wrong? The query, when entered properly, runs successfully. It's just that my page doesn't reload like it, should but it gives me these errors...

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

... and this error ...

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

Here a simplified version of my code:

... 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 ...

I would like to avoid doing the procedural style, since this is an OOP application.

Thank you for your time.

P.S.: The above code sample follows a similar pattern to the first example on this page: http://www.php.net/manual/en/mysqli.query.php

If I follow your link to the manual, there is something mentioned about the return value

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a result object. For other successful queries mysqli_query() will return TRUE.

Especially you don't handle the two cases true and more important 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");
}

I don't know, what $query is in your case, but query() will only return a result, if there is one (SELECT-query).