2016-07-25 30 views
0

Wenn get_result() für eine Anweisung verwendet wird, wird nur false anstelle eines gültigen Objekts zurückgegeben.PHP mysqli get_result() gibt false zurück

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

Die Treffer Var_dump gibt diese Nachricht, die ich keine Informationen Form extrahieren:

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

sieht My DB Klasse wie folgt:

<?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; 
    } 
} 

Jede Hilfe diese Funktion zu erhalten würde geschätzt werden

+0

anstelle von 'echo' einen Eintrag lesen ";' schreiben '$ ret [] = $ row;' und dann Funktion aufrufen und deren Wert einer Variablen zuweisen und dann diese Variable drucken und prüfen, was kommt? –

+0

Ich bekomme bereits 'Fatal error: Aufruf an eine Member-Funktion fetch_assoc() on boolean in Datei.php in Zeile 15 'ist die Zeile, in der die while-Schleife sitzt – Sabbertran

+1

Innerhalb einer statischen Methode, verwenden Sie' self :: $ connection 'um auf die statische Eigenschaft zuzugreifen. Ihre "getConnection()" Methode erstellt neue Verbindungen mit jedem Aufruf –

Antwort

0

Okay, dachte ich mehr über diesen Fehler lesen. Irgendwie arbeitete ich nicht an dem gleichen mysqli-Objekt, wenn ich vorbereitete/ausführte.

Vorübergehend das Objekt speichern behoben mein Problem.

0

Ello, Kumpel.

Wie Sie in Ihrer var_dump() sehen können, gibt die results() -Methode false zurück, weil Sie einen Fehler erhalten haben. Der Fehler "MySQL-Server ist weggegangen" tritt normalerweise auf, wenn Sie die Verbindung während der Abfrage verloren haben.

Sie können auf der das Problem MySql site.

+0

Ich habe auch nur über so etwas nachgedacht, aber dann habe ich eine kleine insert-Anweisung ('DB :: getConnection() -> query (" INSERT INTO Features (Spiel, Bezeichner, Feature) VALUES ('Spiel', 'abc', 'ABC') ");') zum Anfang der Funktion und es wird gerade gut eingefügt – Sabbertran