Start · Sprachen · PHP · Referenz · db2_fetch_row

db2_fetch_row

Funktion

Setzt den Ergebniszeiger eines DB2-Statements auf die nächste oder eine bestimmte Zeile und ermöglicht den anschließenden Zugriff auf Spaltenwerte.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_fetch_row(resource $stmt, int $row_number = -1): bool

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

Typ
bool
Beschreibung
Gibt 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();
}
?>
[1] Anna Müller – anna@example.com [2] Klaus Schmidt – k.schmidt@example.com

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);
}
?>
Zeile 3: [3] Beispielprodukt C

// 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.