2016-07-25 6 views
0

при использовании get_result() в инструкции, он возвращает только false вместо действительного объекта.PHP mysqli get_result() возвращает false

function getGames() { 
    $ret = array(); 
    $stmt = DB::getConnection()->prepare("SELECT * FROM games ORDER BY position DESC"); 
    $stmt->execute(); 
    var_dump($stmt); 
    $result = $stmt->get_result(); 
    while ($row = $result->fetch_assoc()) { 
     echo "read one entry"; 
    } 
    return $ret; 
} 

Перечислен var_dump возвращает это сообщение, которое не может извлечь любую информацию форму:

object(mysqli_stmt)#3 (10) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(0) ["field_count"]=> int(5) ["errno"]=> int(2006) ["error"]=> string(26) "MySQL server has gone away" ["error_list"]=> array(1) { [0]=> array(3) { ["errno"]=> int(2006) ["sqlstate"]=> string(5) "HY000" ["error"]=> string(26) "MySQL server has gone away" } } ["sqlstate"]=> string(5) "HY000" ["id"]=> int(1) } 

Мой класс DB выглядит следующим образом:

<?php 
class DB { 
    private static $connection; 

    static function getConnection() { 
     if (!isset($connection) || $connection->ping()) { 
      $connection = new mysqli("localhost", "user", "pw", "db"); 
      $connection->query("SET NAMES 'utf8'"); 
     } 
     return $connection; 
    } 
} 

Любая помощь, чтобы получить эту работу будет оцениваться

+0

вместо 'echo 'читать одну запись';' писать '$ ret [] = $ row;' а затем вызывать функцию и назначать ее значение переменной, а затем печатать эту переменную и проверять, что происходит? –

+0

Я уже получаю 'Неустранимая ошибка: вызовите функцию-член fetch_assoc() в boolean в файле.php в строке 15', которая является строкой, в которой находится цикл while – Sabbertran

+1

В статическом методе используйте' self :: $ connection 'для доступа к статическому свойству. Ваш метод getConnection() создает новые соединения при каждом вызове –

ответ

0

Хорошо, я понял, проблема. Как-то я не работал над одним и тем же объектом mysqli при подготовке/выполнении.

Временно сохраняя объект, исправил мою проблему.

0

Ello, помощник.

Как вы можете видеть в вашем var_dump(), метод results() возвращает false, потому что вы получили ошибку. Ошибка «сервер MySQL ушла», как правило, происходит, когда вы потеряли соединение во время запроса.

Вы можете прочитать больше об этой ошибке на MySql site.

+0

Я также подумал о чем-то подобном, но затем добавил небольшой оператор insert ('DB :: getConnection() -> query (« INSERT INTO »(игра, идентификатор, функция) VALUES ('game', 'abc', 'ABC') ");') до начала функции, и она вставляется просто отлично – Sabbertran