Signatur
Beschreibung
odbc_next_result wird verwendet, wenn eine gespeicherte Prozedur oder eine Batch-Abfrage über ODBC mehrere Ergebnismengen (Result Sets) zurückliefert. Nach dem Verarbeiten der ersten Ergebnismenge kann mit dieser Funktion zur nächsten gewechselt werden.
Die Funktion gibt true zurück, wenn eine weitere Ergebnismenge verfügbar ist, und stellt das interne Zeigerwerk des Statements auf diese um. Anschließend können die Zeilen wie gewohnt mit odbc_fetch_row, odbc_fetch_array oder ähnlichen Funktionen abgerufen werden. Gibt es keine weitere Ergebnismenge mehr, wird false zurückgegeben.
Diese Funktion ist besonders nützlich, wenn man gegen Microsoft SQL Server oder andere Datenbanksysteme arbeitet, die Batch-Statements oder Stored Procedures mit mehreren SELECT-Ausgaben unterstützen. Ohne odbc_next_result würde man nur die erste Ergebnismenge sehen und alle weiteren ignorieren.
- Gilt nur für ODBC-Verbindungen (
odbc_connect). - Funktioniert nur, wenn der ODBC-Treiber mehrere Ergebnismengen unterstützt.
- Muss in einer Schleife aufgerufen werden, um alle Ergebnismengen zu verarbeiten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges ODBC-Statement-Handle, wie es von odbc_exec oder odbc_execute zurückgegeben wird. |
Rückgabewert
true zurück, wenn eine weitere Ergebnismenge vorhanden ist und das Statement erfolgreich auf diese umgestellt wurde. Gibt false zurück, wenn keine weiteren Ergebnismengen verfügbar sind oder ein Fehler aufgetreten ist.Beispiele
Verarbeitung mehrerer Ergebnismengen einer Stored Procedure
<?php
$conn = odbc_connect('MeinDSN', 'benutzer', 'geheim');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}
// Stored Procedure, die mehrere SELECT-Ergebnisse zurückgibt
$stmt = odbc_exec($conn, 'EXEC sp_meine_prozedur');
if (!$stmt) {
die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}
$resultSetNr = 1;
do {
echo "=== Ergebnismenge #{$resultSetNr} ===".PHP_EOL;
while (odbc_fetch_row($stmt)) {
$numCols = odbc_num_fields($stmt);
for ($i = 1; $i <= $numCols; $i++) {
echo odbc_field_name($stmt, $i) . ': ' . odbc_result($stmt, $i) . ' ';
}
echo PHP_EOL;
}
$resultSetNr++;
} while (odbc_next_result($stmt));
odbc_free_result($stmt);
odbc_close($conn);
?>
Batch-SQL mit mehreren SELECT-Anweisungen
<?php
$conn = odbc_connect('MeinDSN', 'benutzer', 'geheim');
// Mehrere SELECT-Abfragen als Batch
$sql = "SELECT 'Kunden' AS Quelle, COUNT(*) AS Anzahl FROM kunden;
SELECT 'Bestellungen' AS Quelle, COUNT(*) AS Anzahl FROM bestellungen;";
$stmt = odbc_exec($conn, $sql);
$sets = [];
do {
$rows = [];
while ($row = odbc_fetch_array($stmt)) {
$rows[] = $row;
}
$sets[] = $rows;
} while (odbc_next_result($stmt));
foreach ($sets as $idx => $set) {
echo "Ergebnismenge " . ($idx + 1) . ":" . PHP_EOL;
foreach ($set as $row) {
echo ' ' . $row['Quelle'] . ': ' . $row['Anzahl'] . PHP_EOL;
}
}
odbc_free_result($stmt);
odbc_close($conn);
?>
// Wichtig · Fallstricke
Treiberabhängigkeit: Nicht alle ODBC-Treiber unterstützen mehrere Ergebnismengen. Stellen Sie sicher, dass der verwendete Treiber (z. B. für MS SQL Server, Sybase) dies explizit unterstützt. Bei ungeeigneten Treibern gibt die Funktion immer false zurück.
Ressourcenverwaltung: Nach dem Durchlaufen aller Ergebnismengen sollte das Statement-Handle mit odbc_free_result freigegeben werden, um Speicher zu vermeiden.
Fehlerbehandlung: Ein Rückgabewert von false kann sowohl das Ende aller Ergebnismengen als auch einen Fehler signalisieren. Im Zweifelsfall sollte odbc_errormsg zur Diagnose herangezogen werden.