2016-05-11 2 views
-1

mysqli_query содержится в следующем обволакивающей функции в моем коде:Почему mysqli_query() ломается? [Mysqli_query(): Не удалось получить MySQLi]

function QueryDatabase($query){ 
error_log("Database Line 134: " . memory_get_usage(true)); 
$QueryResult = NULL; 

    switch($this->RDBType){ 
     case 'MySQL': 
      error_log('MySQLi link IS Valid?:'); error_log(boolval($this->link)); 
      error_log(get_class($this->link)); 
      error_log("Database Line 139: " . memory_get_usage(true)); 
      error_log("Performing Query: '" . $query . "'"); 
      $QueryResult = mysqli_query($this->link, $query); 
      error_log("Result: " . gettype($QueryResult)); 
      error_log("Database Line 141: " . memory_get_usage(true)); 
      break; 
     case 'PostGreSQL': 
     default: 
      break; 
    } 
error_log("Database Line 147: " . memory_get_usage(true)); 
return $QueryResult; 
} 

Журнал PHP ошибка выглядит следующим образом:

[11-May-2016 17:04:00 Europe/Berlin] Database Line 134: 262144

[11-May-2016 17:04:00 Europe/Berlin] MySQLi link IS Valid?:

[11-May-2016 17:04:00 Europe/Berlin] 1

[11-May-2016 17:04:00 Europe/Berlin] mysqli

[11-May-2016 17:04:00 Europe/Berlin] Database Line 139: 262144

[11-May-2016 17:04:00 Europe/Berlin] Performing Query: 'SELECT * FROM scans INNER JOIN landlot on scans.scansId = landlot.scansId INNER JOIN district on scans.scansid = district.scansId INNER JOIN streetname on scans.scansid = streetname.scansId WHERE Lot = 1;'

[11-May-2016 17:04:00 Europe/Berlin] PHP Warning: mysqli_query(): Couldn't fetch mysqli in I:\xampp\htdocs\GLS_DBSearchProject\Database.php on line 145

[11-May-2016 17:04:00 Europe/Berlin] Result: NULL

[11-May-2016 17:04:00 Europe/Berlin] Database Line 141: 262144

[11-May-2016 17:04:00 Europe/Berlin] Database Line 147: 262144

[11-May-2016 17:04:00 Europe/Berlin] PHP Notice: Trying to get property of non-object in I:\xampp\htdocs\GLS_DBSearchProject\DatabaseSearch.php on line 86

[11-May-2016 17:04:00 Europe/Berlin] Database Line 134: 262144

[11-May-2016 17:04:00 Europe/Berlin] MySQLi link IS Valid?:

[11-May-2016 17:04:00 Europe/Berlin] 1

[11-May-2016 17:04:00 Europe/Berlin] mysqli

[11-May-2016 17:04:00 Europe/Berlin] Database Line 139: 262144

[11-May-2016 17:04:00 Europe/Berlin] Performing Query: 'SELECT * FROM scans INNER JOIN landlot on scans.scansId = landlot.scansId INNER JOIN district on scans.scansid = district.scansId INNER JOIN streetname on scans.scansid = streetname.scansId WHERE Lot = 1 LIMIT 10 OFFSET 0;'

[11-May-2016 17:04:00 Europe/Berlin] PHP Warning: mysqli_query(): Couldn't fetch mysqli in I:\xampp\htdocs\GLS_DBSearchProject\Database.php on line 145

[11-May-2016 17:04:00 Europe/Berlin] Result: NULL

[11-May-2016 17:04:00 Europe/Berlin] Database Line 141: 262144

[11-May-2016 17:04:00 Europe/Berlin] Database Line 147: 262144

[11-May-2016 17:04:00 Europe/Berlin] PHP Fatal error: Call to a member function fetch_assoc() on a non-object in I:\xampp\htdocs\GLS_DBSearchProject\DatabaseSearch.php on line 126

Я действительно путают, почему mysqli_query не возвращает результат. Я использовал свою функцию QueryDatabase() много раз в течение всего моего проекта и до сих пор не встречал никаких проблем. У меня есть тест PHPUnit, который показывает, что моя функция QueryDatabase() работает нормально, а все остальные признаки указывают на проблему, возникающую во время вызова функции mysqli_query().

Я проверил, что ссылка базы данных (объект mysqli, содержащаяся в ссылке $ this->) действительна и указывает на соответствующую базу данных. Я также проверил, чтобы мой запрос работал так, как ожидалось, вручную копируя и вставляя его в браузер запросов mysql.

Если мой запрос действителен и моя ссылка на базу данных действительна, почему может произойти сбой mysqli_query()?

Редактировать: Я никогда не закрывал какие-либо соединения с базой данных. Поэтому соединение с базой данных не должно быть закрыто

+0

Возможный дубликат [Warning: mysqli \ _query(): Не удалось получить mysqli] (http://stackoverflow.com/questions/24973330/warning-mysqli-query-couldnt-fetch-mysqli) – cybermonkey

+0

Чувствительность к регистру в именах столбцов? 'scans.scansId' и' scans.scansid' –

+0

@MarkBaker. Запрос работает нормально - и я получаю те же результаты - независимо от того, капиляция в браузере запросов. Но мне понадобится минута, чтобы проверить это в коде, потому что мои запросы обрабатываются процедурно. –

ответ

1

Нет ничего плохого в ваших журналах.

Живой экземпляр mysqli не означает, что существует живое соединение mysql. В отличие от PDO, вы можете закрыть соединение mysql, но у меня есть объект mysqli. Таким образом, сообщение об ошибке говорит:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
$conn = new mysqli('localhost','root','','test'); 
$conn->query("SELECT 1"); 
$conn->close(); 
var_dump(get_class($conn)); 
$conn->query("SELECT 1"); 

даст вам ожидаемый результат:

string(6) "mysqli"
Warning: mysqli::query(): Couldn't fetch mysqli in mysqli.php on line 10

Вы должны найти место, где ваш код закрытия соединения и зафиксировать его.

Смежные вопросы