Start · Sprachen · PHP · Referenz · odbc_fetch_array

odbc_fetch_array

Funktion

Liest eine Ergebniszeile eines ODBC-Statements als assoziatives Array, wobei die Spaltennamen als Schlüssel verwendet werden.

seit PHP 4.0.2 Kategorie: db

Signatur

odbc_fetch_array(resource $statement, int $row = -1): array|false

Beschreibung

odbc_fetch_array() ruft die nächste (oder eine bestimmte) Zeile aus einem ODBC-Ergebnissatz ab und gibt sie als assoziatives Array zurück. Die Schlüssel des Arrays entsprechen den Spaltennamen der Abfrage, die Werte den jeweiligen Zellinhalten. Damit lassen sich Datenbankwerte direkt über den Spaltennamen ansprechen, ohne numerische Indizes kennen zu müssen.

Gegenüber odbc_fetch_row() in Kombination mit odbc_result() ist odbc_fetch_array() deutlich komfortabler, da der gesamte Zeileninhalt in einem einzigen Aufruf als assoziatives Array verfügbar ist. Der optionale Parameter row erlaubt es, bei geeignetem ODBC-Treiber direkt eine bestimmte Zeile (1-basiert) abzurufen, anstatt sequenziell zu iterieren.

Die Funktion gibt false zurück, wenn keine weitere Zeile verfügbar ist oder ein Fehler aufgetreten ist. Dies macht sie ideal für den Einsatz in einer while-Schleife, um alle Zeilen eines Ergebnissatzes zu durchlaufen.

Hinweis: Die Funktion ist im ODBC-Modul enthalten und steht daher nur zur Verfügung, wenn die odbc-Erweiterung aktiviert ist. Die Groß-/Kleinschreibung der Spaltennamen im zurückgegebenen Array hängt vom ODBC-Treiber ab.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Eine gültige ODBC-Statement-Ressource, wie sie von odbc_exec() oder odbc_execute() zurückgegeben wird.
$row int -1 Optionale 1-basierte Zeilennummer, die direkt abgerufen werden soll. Wird -1 übergeben oder der Parameter weggelassen, wird die nächste Zeile im Ergebnissatz zurückgegeben. Nur bei Treibern mit Cursor-Unterstützung wirksam.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array zurück, dessen Schlüssel die Spaltennamen und dessen Werte die Zellinhalte der aktuellen Zeile sind. Gibt false zurück, wenn keine weitere Zeile vorhanden ist oder ein Fehler aufgetreten ist.

Beispiele

Alle Zeilen eines ODBC-Ergebnisses iterieren

<?php
$conn = odbc_connect('MeinDSN', 'benutzer', 'passwort');

if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}

$sql    = "SELECT id, vorname, nachname FROM kunden WHERE aktiv = 1";
$result = odbc_exec($conn, $sql);

if (!$result) {
    die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}

while ($row = odbc_fetch_array($result)) {
    echo 'ID: '       . htmlspecialchars($row['id'])       . ' | ';
    echo 'Vorname: '  . htmlspecialchars($row['vorname'])  . ' | ';
    echo 'Nachname: ' . htmlspecialchars($row['nachname']) . PHP_EOL;
}

odbc_free_result($result);
odbc_close($conn);
ID: 1 | Vorname: Anna | Nachname: Müller ID: 2 | Vorname: Bernd | Nachname: Schmidt ...

Bestimmte Zeile per Index abrufen

<?php
$conn = odbc_connect('MeinDSN', 'benutzer', 'passwort');

$sql    = "SELECT id, produktname, preis FROM produkte ORDER BY id";
$result = odbc_exec($conn, $sql);

// Direkt die dritte Zeile abrufen (1-basiert)
$row = odbc_fetch_array($result, 3);

if ($row !== false) {
    echo 'Produkt: ' . htmlspecialchars($row['produktname']);
    echo ' – Preis: ' . number_format((float)$row['preis'], 2, ',', '.') . ' €';
} else {
    echo 'Zeile nicht gefunden.';
}

odbc_free_result($result);
odbc_close($conn);
Produkt: Beispielartikel – Preis: 19,99 €

// Wichtig · Fallstricke

Sicherheit: Wie bei allen Datenbankfunktionen sollten Benutzereingaben niemals direkt in SQL-Strings eingefügt werden. Verwende vorbereitete Anweisungen mit odbc_prepare() und odbc_execute(), um SQL-Injection zu verhindern.

Spaltennamen und Groß-/Kleinschreibung: Die Schlüssel des zurückgegebenen Arrays richten sich nach den Spaltennamen, wie sie der ODBC-Treiber liefert. Dies kann je nach Datenbank und Treiber variieren (z. B. alle Großbuchstaben bei einigen Oracle-Treibern). Für stabilen Code empfiehlt sich die Verwendung von strtolower() auf die Schlüssel oder Aliasnamen in der SQL-Abfrage.

Cursor-Unterstützung: Der optionale row-Parameter funktioniert nur bei ODBC-Treibern, die scrollbare Cursor unterstützen. Bei anderen Treibern wird er möglicherweise ignoriert oder löst einen Fehler aus.

Nach der Verwendung sollten Ergebnisse mit odbc_free_result() freigegeben werden, um Speicher zu sparen.