Start · Sprachen · PHP · Referenz · db2_fetch_array

db2_fetch_array

Funktion

Ruft die nächste Zeile eines Abfrageergebnisses als numerisch indiziertes Array ab, wobei der Index der Spaltenposition entspricht.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_fetch_array(resource $stmt, int $row_number = -1): array|false

Beschreibung

db2_fetch_array() liest eine Zeile aus einem IBM-DB2-Abfrageergebnis und gibt diese als numerisch indiziertes Array zurück. Der erste Spaltenindex ist 0, der zweite 1 usw. Die Funktion eignet sich besonders dann, wenn die genauen Spaltennamen unwichtig sind oder wenn Spaltenpositionen explizit ausgewertet werden sollen.

Im Gegensatz zu db2_fetch_assoc(), das assoziative Schlüssel (Spaltennamen) verwendet, oder db2_fetch_both(), das beide Formen kombiniert, liefert db2_fetch_array() ausschließlich numerische Schlüssel. Dies spart etwas Speicher, wenn Spaltenname-Zugriff nicht benötigt wird.

Der optionale Parameter row_number ermöglicht bei scrollbaren Cursorn den direkten Zugriff auf eine bestimmte Zeile (1-basiert). Bei standardmäßigen Forward-Only-Cursorn hat dieser Parameter keine Wirkung und sollte weggelassen oder auf -1 belassen werden.

Die Funktion gibt false zurück, wenn keine weitere Zeile verfügbar ist oder ein Fehler aufgetreten ist, was eine einfache Verwendung in while-Schleifen ermöglicht.

Parameter

Name Typ Default Beschreibung
$stmt Pflicht resource Eine gültige Statement-Ressource, die von db2_exec() oder db2_execute() zurückgegeben wurde und ein aktives Abfrageergebnis enthält.
$row_number int -1 Bei scrollbaren Cursorn die 1-basierte Zeilennummer, die abgerufen werden soll. Wird -1 übergeben oder der Parameter weggelassen, wird die nächste verfügbare Zeile zurückgegeben.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array zurück, das die Spaltenwerte der aktuellen Zeile enthält (Index 0 für die erste Spalte). Gibt false zurück, wenn keine weitere Zeile vorhanden ist oder ein Fehler aufgetreten ist.

Beispiele

Alle Zeilen einer Abfrage mit db2_fetch_array() ausgeben

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');

if ($conn) {
    $sql = 'SELECT id, vorname, nachname FROM mitarbeiter ORDER BY id';
    $stmt = db2_exec($conn, $sql);

    if ($stmt) {
        while ($row = db2_fetch_array($stmt)) {
            // Spalten werden über numerische Indizes angesprochen
            echo 'ID: ' . $row[0] . ', Name: ' . $row[1] . ' ' . $row[2] . PHP_EOL;
        }
    } else {
        echo 'Fehler beim Ausführen der Abfrage: ' . db2_stmt_errormsg();
    }

    db2_close($conn);
} else {
    echo 'Verbindung fehlgeschlagen: ' . db2_conn_errormsg();
}
?>
ID: 1, Name: Max Mustermann ID: 2, Name: Erika Musterfrau ID: 3, Name: Hans Schmidt

Bestimmte Zeile mit scrollbarem Cursor abrufen

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');

if ($conn) {
    $sql = 'SELECT id, abteilung, gehalt FROM mitarbeiter ORDER BY id';

    // Scrollbaren Cursor aktivieren
    $options = ['cursor' => DB2_SCROLLABLE];
    $stmt = db2_exec($conn, $sql, $options);

    if ($stmt) {
        // Direkt die dritte Zeile abrufen (1-basierter Index)
        $row = db2_fetch_array($stmt, 3);

        if ($row !== false) {
            echo 'Dritter Mitarbeiter — ID: ' . $row[0]
                . ', Abteilung: ' . $row[1]
                . ', Gehalt: ' . number_format($row[2], 2, ',', '.') . ' EUR' . PHP_EOL;
        } else {
            echo 'Zeile nicht gefunden.';
        }
    }

    db2_close($conn);
}
?>
Dritter Mitarbeiter — ID: 3, Abteilung: Entwicklung, Gehalt: 4.500,00 EUR

// Wichtig · Fallstricke

Voraussetzung: Die IBM-DB2-Erweiterung (ibm_db2) muss installiert und aktiviert sein. Diese ist standardmäßig nicht in PHP enthalten und muss separat über PECL installiert werden.

Spaltenindizes: Die Indizes beginnen bei 0. Bei SELECT * hängt die Reihenfolge von der Tabellendefinition ab, was die Wartbarkeit erschwert. Es wird empfohlen, Spalten explizit in der SELECT-Klausel zu benennen.

NULL-Werte: Datenbankspalten mit NULL-Wert werden als PHP-null im Array abgelegt.

Scrollbare Cursor: Der Parameter row_number ist nur wirksam, wenn das Statement mit der Option DB2_SCROLLABLE ausgeführt wurde. Andernfalls hat er keine Wirkung und erzeugt möglicherweise einen Fehler.