Signatur
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
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);
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);
// 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.