Bei der Verwendung von PHP für Datenbankoperationen ist es eines der gängigen Phänomene, um Fehler zu begegnen. Unter ihnen hängt der Fehler "eine Methode auf einem Objekt, das nicht mySQLI_Result ist" mit der Verarbeitung von Datenbankabfrageergebnissen zusammen. Lassen Sie uns die Ursache dieses Fehlers analysieren und Ideen zur Lösung von dieser Fehler analysieren.
In PHP führen wir bei der Verwendung der MySQLI -Erweiterung für Datenbankvorgänge normalerweise Abfragen aus und erwarten, dass ein Ergebnis aus der Datenbank eingestellt wird, bei dem es sich um ein mySQLI_Result -Objekt handelt. Dieses Objekt kann eine Reihe von Methoden verwenden, um auf die Ergebnisse einer Abfrage zuzugreifen.
Führen Sie beispielsweise die folgende SQL -Abfrage aus:
$sql = "SELECT * FROM users WHERE id = 1";
$result = $mysqli->query($sql);
Die $ -sergebnisvariable sollte ein mySQLI_Result -Objekt sein. Wenn die Abfrage erfolgreich ist, können Sie sie weiterhin verwenden, um die Abfragedaten zu erhalten:
$row = $result->fetch_assoc(); // Holen Sie sich eine Datenlinie
In einigen Fällen ist das $ -Reergebnis jedoch möglicherweise nicht vom Typ mySQLI_Result , sondern ein anderes Objekt oder eine andere Variable. Zu diesem Zeitpunkt wird ein Fehler wie "Aufruf einer Methode auf einem Objekt, das nicht mySQLi_Result aufgerufen" aufgerufen wird.
Die Ursachen dieses Fehlers sind normalerweise die folgenden:
Abfrage fehlgeschlagen : Wenn die Methode query () nicht ausgeführt wird, gibt sie falsch anstelle des Objekts von MySQLi_Result zurück. Wenn Sie zu diesem Zeitpunkt Fetch_assoc () oder andere Methoden für $ -sergebnis weiter aufrufen, tritt ein Typfehler auf.
Zum Beispiel:
$result = $mysqli->query($sql);
if ($result === false) {
die("Abfrage fehlgeschlagen: " . $mysqli->error);
}
Dieser Code stellt sicher, dass die Methode mySQLI_Result nicht weiter aufgerufen wird, wenn die Abfrage fehlschlägt, wodurch Typ -Fehler vermieden wird.
Verbindungsfehler : Wenn die Datenbankverbindung fehlschlägt, funktioniert das $ mysqli -Objekt selbst nicht ordnungsgemäß. Stellen Sie sicher, dass die Datenbankverbindung erfolgreich ist:
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
Wenn die Datenbankverbindung nicht erfolgreich ist, werden nachfolgende Abfragen nicht ausgeführt, sodass das $ -Reergebnis nicht vom Typ mySQLI_Result ist.
Aufruffehler : Manchmal kann das Programm aufgrund logischer Probleme Methoden wie Fetch_assoc () an einem falschen Ort aufrufen, was zu einem $ -Reer -Ergebnis nicht zu einem Abfrageergebnis -Objekt führt.
Bei der Lösung dieses Problems können Sie Debug -Code hinzufügen, um die Art von $ -sergebnis zu überprüfen, um zu bestätigen, dass es sich um ein mySQLI_Result -Objekt handelt:
var_dump($result);
Um diesen Typfehler zu vermeiden, prüfen Sie, ob $ ein gültiges MySQLi_Result -Objekt nach dem Abfragevorgang ist. Hier ist ein verbessertes Codebeispiel:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// Überprüfen Sie, ob die Verbindung erfolgreich ist
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM users WHERE id = 1";
$result = $mysqli->query($sql);
// Überprüfen Sie, ob die Abfrage erfolgreich ist
if ($result === false) {
die("Abfrage fehlgeschlagen: " . $mysqli->error);
}
// Prozessabfragenergebnisse
while ($row = $result->fetch_assoc()) {
echo "BenutzerID: " . $row['id'] . " Benutzer名: " . $row['name'] . "<br>";
}
?>
Stellen Sie durch Überprüfen des Rückgabewerts der Query () -Methode sicher, dass sie ein gültiges mySQLI_Result -Objekt zurückgibt, damit diese Typfehler vermieden werden können.
Bei Verwendung der MySQLI -Erweiterung in PHP treten Fehler häufig bei Abfragebefehlern oder falschen Objekttyp -Aufrufen auf. Wenn Sie sicherstellen, dass die Ergebnismenge nach jeder Abfrage gültig ist, und das Vermeiden von Aufrufen von Methoden auf dem falschen Objekt ist der Schlüssel zur Lösung dieser Fehlertyp.