MySQLi PHP Расширение Проблемы - PullRequest
0 голосов
/ 16 июня 2011

Я новичок в расширении 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 ...

Я бы не хотел использовать процедурный стиль, поскольку это приложение ООП.

Спасибо за потраченное время.

PS: приведенный выше пример кода соответствует шаблону, приведенному в первом примере на этой странице: http://www.php.net/manual/en/mysqli.query.php

1 Ответ

5 голосов
/ 16 июня 2011

Если я перейду по вашей ссылке на руководство, там будет упомянуто что-то о возвращаемом значении

Возвращает 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 -запрос).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...