Start · Sprachen · PHP · Referenz · db2_fetch_assoc

db2_fetch_assoc

Funktion

Liefert die nächste Zeile eines IBM DB2-Abfrageergebnisses als assoziatives Array, dessen Schlüssel den Spaltennamen entsprechen.

seit PHP 5.1.0 Kategorie: db

Signatur

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

Beschreibung

db2_fetch_assoc() liest eine Zeile aus dem Ergebnis einer vorbereiteten oder ausgeführten DB2-Abfrage und gibt sie als assoziatives Array zurück, bei dem die Array-Schlüssel den Spaltennamen (in Großbuchstaben) der Abfrage entsprechen. Ist kein weiterer Datensatz vorhanden oder tritt ein Fehler auf, wird false zurückgegeben.

Die Funktion ist Teil der IBM DB2-Erweiterung (ibm_db2) und eignet sich besonders dann, wenn man auf Spalten per Name zugreifen möchte, ohne sich Gedanken über die numerische Reihenfolge der Spalten machen zu müssen. Sie ist damit lesbarer als db2_fetch_row() mit anschließendem db2_result().

Standardmäßig wird der Cursor nach jedem Aufruf automatisch um eine Zeile weitergesetzt. Über den optionalen Parameter row_number kann bei scrollbaren Cursorn eine bestimmte Zeile direkt angesprungen werden (1-basierter Index).

Spaltenname-Schlüssel werden von DB2 typischerweise in Großbuchstaben zurückgegeben. Bei der Verwendung von Aliasnamen in der SQL-Abfrage richten sich die Schlüssel nach den definierten Aliasnamen.

Parameter

Name Typ Default Beschreibung
$stmt Pflicht resource Eine gültige Statement-Ressource, die zuvor mit db2_exec() oder db2_execute() ausgeführt wurde.
$row_number int -1 Gibt bei scrollbaren Cursorn die gewünschte Zeilennummer (1-basiert) an. Bei -1 (Standard) wird die nächste Zeile des sequenziellen Cursors zurückgegeben.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array zurück, dessen Schlüssel den Spaltennamen der Abfrage entsprechen. Wenn keine weitere Zeile vorhanden ist oder ein Fehler auftritt, wird false zurückgegeben.

Beispiele

Alle Zeilen einer DB2-Tabelle sequenziell auslesen

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

if ($conn) {
    $sql = 'SELECT FIRSTNAME, LASTNAME, SALARY FROM EMPLOYEE';
    $stmt = db2_exec($conn, $sql);

    if ($stmt) {
        while ($row = db2_fetch_assoc($stmt)) {
            echo $row['FIRSTNAME'] . ' ' . $row['LASTNAME']
                 . ' – Gehalt: ' . $row['SALARY'] . PHP_EOL;
        }
        db2_free_stmt($stmt);
    }
    db2_close($conn);
}
John Smith – Gehalt: 60000.00 Jane Doe – Gehalt: 72000.00

Spaltennamen per SQL-Alias steuern

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

if ($conn) {
    $sql = "SELECT FIRSTNME AS vorname, LASTNAME AS nachname FROM EMPLOYEE WHERE EMPNO = '000010'";
    $stmt = db2_exec($conn, $sql);

    if ($stmt) {
        $row = db2_fetch_assoc($stmt);
        if ($row !== false) {
            // Zugriff über den definierten Alias (Großbuchstaben)
            echo 'Vorname: ' . $row['VORNAME'] . PHP_EOL;
            echo 'Nachname: ' . $row['NACHNAME'] . PHP_EOL;
        }
        db2_free_stmt($stmt);
    }
    db2_close($conn);
}
Vorname: Christine Nachname: Haas

// Wichtig · Fallstricke

Groß-/Kleinschreibung der Schlüssel: IBM DB2 liefert Spaltennamen standardmäßig in Großbuchstaben. Achte daher beim Zugriff auf Array-Schlüssel auf die korrekte Schreibweise ($row['LASTNAME'] statt $row['lastname']).

Scrollbare Cursor: Der Parameter row_number funktioniert nur, wenn das Statement mit einem scrollbaren Cursor erstellt wurde (z. B. db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE))). Bei vorwärtsgerichteten Cursorn (Standard) wird der Parameter ignoriert.

Ressourcen freigeben: Nach dem Auslesen der Daten sollte die Statement-Ressource mit db2_free_stmt() und die Verbindung mit db2_close() freigegeben werden, um Speicher- und Verbindungslecks zu vermeiden.