Skip to content
Advertisement

MySQLi PHP Extension Problems

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:

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());
  }
}

Advertisement

Answer

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

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement