Signatur
Beschreibung
db2_next_result() wird verwendet, wenn eine gespeicherte Prozedur (Stored Procedure) über mehrere Ergebnismengen verfügt. Nach dem Aufruf von db2_execute() oder db2_exec() liefert die Funktion das nächste Ergebnisset als neues Statement-Handle zurück, mit dem anschließend Zeilen abgerufen werden können.
Die Funktion gibt eine neue Ressource (resource) zurück, die wie ein normales Statement-Handle behandelt werden kann – also mit Funktionen wie db2_fetch_assoc(), db2_fetch_array() oder db2_fetch_object(). Solange weitere Ergebnissets vorhanden sind, gibt die Funktion bei jedem Aufruf ein neues Handle zurück. Sind alle Ergebnissets verarbeitet, wird false zurückgegeben.
Dies ist besonders nützlich, wenn man mit DB2-gespeicherten Prozeduren arbeitet, die z. B. Statistiken und Detaildaten in getrennten Ergebnismengen zurückliefern. Die Verarbeitung erfolgt typischerweise in einer Schleife, bis db2_next_result() false zurückgibt.
- Das ursprüngliche Statement-Handle bleibt gültig und zeigt weiterhin auf das erste Ergebnisset.
- Jedes zurückgegebene Handle kann unabhängig verwendet werden, um Zeilen abzurufen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $stmt Pflicht | resource | Ein gültiges Statement-Handle, das durch db2_exec() oder db2_execute() nach dem Aufruf einer gespeicherten Prozedur erzeugt wurde. |
Rückgabewert
false zurück, wenn keine weiteren Ergebnissets existieren oder ein Fehler aufgetreten ist.Beispiele
Mehrere Ergebnissets einer gespeicherten Prozedur verarbeiten
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');
if ($conn) {
// Gespeicherte Prozedur aufrufen, die zwei Ergebnissets liefert
$stmt = db2_exec($conn, 'CALL get_orders_and_customers()');
if ($stmt) {
// Erstes Ergebnisset: Bestellungen
echo "=== Bestellungen ===";
while ($row = db2_fetch_assoc($stmt)) {
echo "Bestell-ID: " . $row['ORDER_ID'] . ", Datum: " . $row['ORDER_DATE'] . "\n";
}
// Zweites Ergebnisset anfordern: Kunden
$stmt2 = db2_next_result($stmt);
if ($stmt2) {
echo "=== Kunden ===";
while ($row = db2_fetch_assoc($stmt2)) {
echo "Kunden-ID: " . $row['CUSTOMER_ID'] . ", Name: " . $row['NAME'] . "\n";
}
} else {
echo "Kein weiteres Ergebnisset vorhanden.\n";
}
}
db2_close($conn);
}
Alle Ergebnissets in einer Schleife verarbeiten
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');
if ($conn) {
$stmt = db2_exec($conn, 'CALL get_multiple_results()');
if ($stmt) {
$resultHandle = $stmt;
$setIndex = 1;
do {
echo "--- Ergebnisset #{$setIndex} ---\n";
while ($row = db2_fetch_array($resultHandle)) {
echo implode(', ', $row) . "\n";
}
$setIndex++;
$resultHandle = db2_next_result($stmt);
} while ($resultHandle !== false);
echo "Alle Ergebnissets verarbeitet.\n";
}
db2_close($conn);
}
// Wichtig · Fallstricke
Achtung: db2_next_result() akzeptiert immer das ursprüngliche Statement-Handle als Parameter – nicht das zuletzt zurückgegebene Handle. Bei jedem Aufruf wird das jeweils nächste Ergebnisset in der Reihenfolge zurückgegeben.
Die Funktion ist nur verfügbar, wenn die PHP-Extension ibm_db2 installiert und aktiviert ist. Sie ist speziell für IBM DB2 ausgelegt und nicht für andere Datenbanken nutzbar.
Nicht alle gespeicherten Prozeduren liefern mehrere Ergebnissets. Vor dem Einsatz sollte die jeweilige Prozedur-Dokumentation geprüft werden, um sicherzustellen, dass mehrere Ergebnismengen erwartet werden.