Jedes Mal, wenn Sie die ...
"Warnung: mysqli_fetch_object () erwartet, dass Parameter 1 mysqli_result ist, boolescher Wert"
... es ist wahrscheinlich, weil es ein Problem mit Ihrer Anfrage gibt. Das prepare()
oder query()
könnte zurückkehren FALSE
(ein Boolescher Wert), aber diese generische Fehlermeldung lässt Sie nicht viel im Weg. Wie finden Sie heraus, was mit Ihrer Anfrage nicht stimmt? Du fragst !
Stellen Sie zunächst sicher, dass die Fehlerberichterstattung aktiviert und sichtbar ist: Fügen Sie diese beiden Zeilen direkt nach dem Öffnen des <?php
Tags oben in Ihre Datei (en) ein :
error_reporting(E_ALL);
ini_set('display_errors', 1);
Wenn Ihre Fehlerberichterstattung in der php.ini festgelegt wurde, müssen Sie sich darüber keine Sorgen machen. Stellen Sie einfach sicher, dass Sie Fehler ordnungsgemäß behandeln und Ihren Benutzern niemals die wahre Ursache von Problemen mitteilen. Die Offenlegung der wahren Ursache für die Öffentlichkeit kann eine goldgravierte Einladung für diejenigen sein, die Ihren Websites und Servern Schaden zufügen möchten. Wenn Sie keine Fehler an den Browser senden möchten, können Sie jederzeit die Fehlerprotokolle Ihres Webservers überwachen. Die Protokollspeicherorte variieren von Server zu Server, z. B. befindet sich unter Ubuntu das Fehlerprotokoll normalerweise unter /var/log/apache2/error.log
. Wenn Sie Fehlerprotokolle in einer Linux-Umgebung untersuchen, können Sie tail -f /path/to/log
in einem Konsolenfenster Fehler anzeigen, wie sie in Echtzeit auftreten ... oder wie Sie sie erstellen.
Sobald Sie mit der Standardfehlerberichterstattung fertig sind, erhalten Sie durch Hinzufügen von Fehlerprüfungen für Ihre Datenbankverbindung und Abfragen viel mehr Details zu den auftretenden Problemen. Schauen Sie sich dieses Beispiel an, in dem der Spaltenname falsch ist. Zunächst der Code, der die generische schwerwiegende Fehlermeldung zurückgibt:
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
Der Fehler ist allgemein und für Sie bei der Lösung der Vorgänge nicht sehr hilfreich.
Mit ein paar weiteren Codezeilen erhalten Sie sehr detaillierte Informationen, mit denen Sie das Problem sofort lösen können . Überprüfen Sie die prepare()
Aussage auf Richtigkeit und wenn sie gut ist, können Sie mit dem Binden und Ausführen fortfahren.
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
// handle error
}
Wenn etwas nicht stimmt, können Sie eine Fehlermeldung ausspucken, die Sie direkt zum Problem führt. In diesem Fall gibt es keine foo
Spalte in der Tabelle. Die Lösung des Problems ist trivial.
Wenn Sie möchten, können Sie diese Prüfung in eine Funktion oder Klasse aufnehmen und erweitern, indem Sie die Fehler wie zuvor erwähnt ordnungsgemäß behandeln.