Signatur
Beschreibung
mysqli_more_results() wird in Kombination mit mysqli_multi_query() eingesetzt, um festzustellen, ob nach dem Abrufen einer Ergebnismenge noch weitere Ergebnismengen aus einer Mehrfachabfrage vorliegen. Die Funktion gibt true zurück, solange weitere Ergebnisse verfügbar sind, und false, sobald alle Ergebnisse verarbeitet wurden.
Typischerweise wird mysqli_more_results() als Schleifenbedingung verwendet: Zuerst ruft man die aktuelle Ergebnismenge mit mysqli_store_result() oder mysqli_use_result() ab, verarbeitet sie und wechselt dann mit mysqli_next_result() zur nächsten Ergebnismenge — solange mysqli_more_results() noch true liefert.
Diese Funktion ist besonders nützlich, wenn mehrere SQL-Anweisungen in einem einzigen Aufruf von mysqli_multi_query() ausgeführt werden, etwa bei der Ausführung von Stored Procedures, die mehrere Resultsets zurückgeben, oder beim Batchverarbeiten mehrerer SELECT-Abfragen.
In der objektorientierten Variante steht die Methode $mysqli->more_results() zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mysql Pflicht | mysqli | Ein gültiges mysqli-Verbindungsobjekt, das von mysqli_connect() oder mysqli_init() zurückgegeben wurde. |
Rückgabewert
true zurück, wenn noch weitere Ergebnismengen aus einer Mehrfachabfrage vorhanden sind, andernfalls false.Beispiele
Mehrfachabfrage mit allen Ergebnissen verarbeiten
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'geheim', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindung fehlgeschlagen: ' . $mysqli->connect_error);
}
$sql = "SELECT id, name FROM kunden LIMIT 3;
SELECT id, titel FROM produkte LIMIT 3;";
if ($mysqli->multi_query($sql)) {
do {
// Aktuelle Ergebnismenge abrufen
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$result->free();
}
// Trennlinie zwischen den Ergebnismengen
if ($mysqli->more_results()) {
echo "--- Nächste Ergebnismenge ---\n";
}
} while ($mysqli->next_result());
} else {
echo 'Fehler bei Mehrfachabfrage: ' . $mysqli->error;
}
$mysqli->close();
Prozedurale Variante mit mysqli_more_results
<?php
$link = mysqli_connect('localhost', 'benutzer', 'geheim', 'testdb');
if (!$link) {
die('Verbindung fehlgeschlagen: ' . mysqli_connect_error());
}
$sql = "SELECT COUNT(*) AS anzahl FROM kunden;
SELECT COUNT(*) AS anzahl FROM produkte;";
if (mysqli_multi_query($link, $sql)) {
$i = 1;
do {
if ($result = mysqli_store_result($link)) {
$row = mysqli_fetch_assoc($result);
echo "Abfrage $i: Anzahl = " . $row['anzahl'] . "\n";
mysqli_free_result($result);
$i++;
}
} while (mysqli_more_results($link) && mysqli_next_result($link));
}
mysqli_close($link);
// Wichtig · Fallstricke
Sicherheitshinweis: mysqli_multi_query() und damit auch mysqli_more_results() erlauben die Ausführung mehrerer SQL-Anweisungen. Werden Benutzereingaben in die Abfragen eingebaut, entsteht ein erhöhtes SQL-Injection-Risiko. Verwende niemals unvalidierte Benutzereingaben direkt in Mehrfachabfragen — setze stattdessen auf Prepared Statements oder strikte Eingabevalidierung.
Fehlerbehandlung: Wenn mysqli_next_result() auf einen Fehler in einer Teilabfrage trifft, bricht die Schleife möglicherweise vorzeitig ab. Prüfe nach der Schleife $mysqli->errno und $mysqli->error, um sicherzustellen, dass alle Abfragen erfolgreich waren.
Ressourcenverwaltung: Nicht abgerufene Ergebnismengen blockieren die Verbindung für weitere Abfragen. Stelle sicher, dass alle Ergebnisse mit store_result() / free() vollständig verarbeitet werden.