Bei der Verwendung von PHP für Datenbankvorgänge, insbesondere bei der Ausführung mehrerer SQL -Abfragen, ist häufig die methode von Next_result () erforderlich. Der Zweck von Next_Result () besteht darin, das Objekt auf den Ergebnissatz der nächsten Abfrage zu wechseln. Aber das Problem ist:
Next_Result () gibt einen booleschen Wert zurück:
Return True : Gibt an, dass der nächste Ergebnissatz erfolgreich auf die nächste Ergebnismenge umgestellt wird oder die nächste Ergebnismenge leer ist (z. B. Aktualisieren von Anweisungen, die keine Zeilen zurückgeben).
Rückgabe falsch : bedeutet, dass es während des Schaltvorgangs keine mehr Ergebnissätze gibt oder ein Fehler aufgetreten ist.
Der direkteste Weg, um zu beurteilen, besteht darin, den Rückgabewert von Next_Result () zu überprüfen.
Schauen wir uns ein einfaches Beispiel an:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// Führen Sie mehrere Fragen aus
$sql = "SELECT * FROM users; SELECT * FROM orders;";
if ($mysqli->multi_query($sql)) {
do {
if ($result = $mysqli->store_result()) {
// Verarbeiten Sie das aktuelle Ergebnissatz
while ($row = $result->fetch_assoc()) {
echo "Datenreihen:" . json_encode($row) . "<br>";
}
$result->free();
} else {
// Die aktuelle Aussage ist nicht SELECT Abfrage wie,Vielleicht UPDATE、INSERT Warten
if ($mysqli->errno) {
echo "Sparenergebnis -Set fehlgeschlagen,Fehler:" . $mysqli->error . "<br>";
}
}
// Versuchen Sie, zum nächsten Ergebnissatz zu wechseln
if ($mysqli->more_results()) {
if (!$mysqli->next_result()) {
echo "Das Umschalten zum nächsten Ergebnissatz ist fehlgeschlagen,Fehler:" . $mysqli->error . "<br>";
break;
}
} else {
// Keine Ergebnisse mehr
break;
}
} while (true);
} else {
echo "Führen Sie mehrere Fragen aus失败,Fehler:" . $mysqli->error;
}
$mysqli->close();
?>
Um eine fehlende Fehlererkennung zu vermeiden, wird empfohlen , zu prüfen, ob $ mysqli-> errno sofort nach dem Aufrufen von Next_Result () 0 ist. Wenn nicht 0, bedeutet dies, dass zwar Next_result () true zurückgibt, während des Prozesses ein Fehler aufgetreten ist, wie z. B. ein Syntaxfehler.
Eine strengere Version kann so geschrieben werden:
if ($mysqli->more_results()) {
if (!$mysqli->next_result()) {
// 发生了切换Fehler
error_log("Das Ergebnis des Ergebnissatzes fehlgeschlagen:" . $mysqli->error);
break;
} elseif ($mysqli->errno) {
// next_result() zurückkehren true,但实际出现了Fehler
error_log("Eine Ausnahme trat beim Wechseln der Ergebnissätze auf:" . $mysqli->error);
break;
}
}
Um festzustellen, ob Next_Result () erfolgreich ist, sollte es sein:
Überprüfen Sie, ob der Rückgabewert von Next_Result () wahr ist.
Überprüfen Sie, ob $ MySQLi-> Errno 0 ist.
Verwenden Sie zum richtigen Zeitpunkt More_Results (), um festzustellen, ob es erforderlich ist, Next_Result () anzurufen.
Obwohl mehrere Abfragen sehr leistungsfähig sind, müssen Sie beim Umgang mit Fehlern vorsichtig sein, ansonsten sind versteckte Fehler anfällig für eintreten.
Wenn Sie mehr über die Details von Multi_Query () und Next_Result () erfahren möchten, können Sie sich auf die offizielle Dokumentation beziehen (Beispiel -URL, Domänenname wurde durch gitbox.net ersetzt).