Bei Verwendung von PHP und MySQLI für Datenbankvorgänge führen wir normalerweise nur eine Abfrage gleichzeitig aus. In einigen komplexen Geschäftsszenarien müssen jedoch möglicherweise mehrere Abfrageanweisungen über eine Anfrage ausgeführt werden, und zu diesem Zeitpunkt müssen mehrere Ergebnissätze verarbeitet werden. Die MySQLI -Erweiterung von PHP bietet die NEXT_RESULT () -Funktion, mit der wir diese Ergebnissätze durchqueren können.
Mehrere Ergebnissätze treten normalerweise auf, wenn SQL -Abfragen, die mehrere Anweisungen enthalten, ausgeführt werden, beispielsweise:
SELECT * FROM users; SELECT * FROM orders;
Dies ist üblich, wenn SQL in gespeicherten Verfahren (gespeicherte Verfahren) oder in Chargen ausgeführt wird. Mysqli_multi_query () in PHP unterstützt diese Form der Batch -Ausführung.
Die grundlegenden Schritte für die Verwendung von MySQLI_Multi_query () und Next_Result (), um mehrere Ergebnissätze in PHP zu verarbeiten, sind wie folgt:
Erstellen Sie eine Datenbankverbindung
Verwenden Sie MySQLi_Multi_query (), um eine Abfrage mit mehreren Statements durchzuführen
Verwenden Sie Store_Result (), um das aktuelle Ergebnissatz zu erhalten
Verwenden Sie Next_Result () , um zum nächsten Ergebnis -Set zu wechseln
Hier ist ein konkretes Beispiel, das zeigt, wie Sie durch mehrere Ergebnissätze iterieren und Daten extrahieren können:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$sql = "SELECT id, username FROM users; SELECT id, order_date FROM orders;";
if ($mysqli->multi_query($sql)) {
do {
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
echo "<pre>";
print_r($row);
echo "</pre>";
}
$result->free();
}
// Überprüfen Sie, ob es mehr Ergebnissätze gibt
if ($mysqli->more_results()) {
echo "<hr>Nächstes Ergebnissatz:<br>";
}
} while ($mysqli->next_result());
} else {
echo "Abfrageausführung fehlgeschlagen: " . $mysqli->error;
}
$mysqli->close();
?>
Stellen Sie sicher, dass SQL -Anweisungen durch Semikolonen getrennt werden : Dies ist für Multi_Query () erforderlich.
Jedes Ergebnissatz muss mit store_result () extrahiert werden und die Ressourcen müssen rechtzeitig freigegeben werden .
Next_Result () gibt keine Daten zurück, seine Funktion besteht darin, Store_Result () zu aktivieren, um das nächste Ergebnissatz zu extrahieren .
Während des Debuggens können Sie MySQLI-> Fehler zum Anzeigen von Fehlerinformationen drucken .
Lesen Sie Daten aus mehreren Tabellen in Stapeln und zeigen Sie diese auf derselben Seite an
Rufen Sie gespeicherte Prozeduren auf, die mehrere Ergebnissätze zurückgeben
Bei der Durchführung einer komplexen statistischen Analyse SQL -Abfragen
Achten Sie bei der Ausführung von Multi-Statement-Abfragen unbedingt auf SQL-Injektionsrisiken. Die Verwendung von Prepet und Bind_Param -Methoden ist ein sichererer Ansatz, obwohl Multi_query () selbst nicht unterstützt , die Logik in mehrere einzelne Abfragen aufteilt, um Risiken zu vermeiden.