Signatur
Beschreibung
db2_fetch_row() bewegt den internen Cursor eines ausgeführten DB2-Statements auf die nächste Zeile des Ergebnissets (oder auf eine explizit angegebene Zeile, sofern der Cursor scrollfähig ist). Nach einem erfolgreichen Aufruf können die einzelnen Spaltenwerte der aktuellen Zeile mit db2_result() abgerufen werden.
Im Gegensatz zu db2_fetch_assoc(), db2_fetch_array() oder db2_fetch_object() liefert db2_fetch_row() die Daten nicht direkt als Array oder Objekt zurück, sondern positioniert lediglich den Cursor. Diese Trennung ist nützlich, wenn man gezielt auf einzelne Spalten zugreifen möchte, ohne das gesamte Ergebnis-Array allozieren zu müssen.
Um alle Zeilen eines Ergebnissets zu durchlaufen, wird db2_fetch_row() typischerweise in einer while-Schleife verwendet. Das optionale Argument $row_number erlaubt bei scrollfähigen Cursoren den direkten Sprung auf eine bestimmte Zeilennummer (1-basiert).
Die Funktion ist Teil der IBM DB2-Erweiterung (ibm_db2) und steht für Verbindungen zu DB2-, Cloudscape- und Apache-Derby-Datenbanken zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $stmt Pflicht | resource | Ein gültiges Statement-Handle, das zuvor mit db2_exec() oder db2_execute() ausgeführt wurde. |
|
| $row_number | int | -1 | Die 1-basierte Zeilennummer, auf die der Cursor positioniert werden soll. Wird nur bei scrollfähigen Cursoren berücksichtigt. Der Standardwert -1 bewegt den Cursor zur nächsten Zeile. |
Rückgabewert
true zurück, wenn eine Zeile erfolgreich abgerufen wurde. Gibt false zurück, wenn keine weitere Zeile vorhanden ist oder ein Fehler aufgetreten ist.Beispiele
Alle Zeilen eines Ergebnissets durchlaufen
<?php
$conn = db2_connect('DATENBANK', 'benutzer', 'passwort');
if ($conn) {
$sql = 'SELECT id, name, email FROM benutzer ORDER BY name';
$stmt = db2_exec($conn, $sql);
if ($stmt) {
while (db2_fetch_row($stmt)) {
$id = db2_result($stmt, 0); // Spalte per Index
$name = db2_result($stmt, 'NAME'); // Spalte per Name
$email = db2_result($stmt, 'EMAIL');
echo "[$id] $name – $email\n";
}
} else {
echo 'Statement-Fehler: ' . db2_stmt_errormsg();
}
db2_close($conn);
} else {
echo 'Verbindungsfehler: ' . db2_conn_errormsg();
}
?>
Direkte Zeilenpositionierung mit scrollfähigem Cursor
<?php
$conn = db2_connect('DATENBANK', 'benutzer', 'passwort');
if ($conn) {
$sql = 'SELECT id, name FROM produkte ORDER BY id';
$opts = ['cursor' => DB2_SCROLLABLE];
$stmt = db2_exec($conn, $sql, $opts);
if ($stmt) {
// Direkt auf die dritte Zeile springen
if (db2_fetch_row($stmt, 3)) {
$id = db2_result($stmt, 'ID');
$name = db2_result($stmt, 'NAME');
echo "Zeile 3: [$id] $name\n";
} else {
echo 'Zeile 3 existiert nicht.';
}
}
db2_close($conn);
}
?>
// Wichtig · Fallstricke
Cursor-Typ: Die direkte Zeilenpositionierung über $row_number ist nur mit einem scrollfähigen Cursor möglich, der beim Ausführen des Statements mit der Option DB2_SCROLLABLE angefordert wird. Bei Vorwärts-only-Cursorn (Standard) wird der Parameter ignoriert.
Zusammenspiel mit db2_result(): Nach db2_fetch_row() zwingend db2_result() für den Spaltenzugriff verwenden. Spaltennamen werden dabei in Großbuchstaben angegeben, sofern die Datenbank keine Anführungszeichen bei der Erstellung verwendet hat.
Ressourcen-Verwaltung: Nicht mehr benötigte Statements sollten mit db2_free_stmt() freigegeben werden, um Datenbankressourcen zu schonen.