Signatur
Beschreibung
odbc_fetch_object() ruft eine Zeile aus einem ODBC-Abfrageergebnis ab und gibt sie als stdClass-Objekt zurück. Jede Spalte des Ergebnisses wird dabei zu einer Eigenschaft des Objekts, wobei der Spaltenname als Eigenschaftsname verwendet wird. Das ist besonders praktisch, wenn man auf Spalten per Pfeil-Operator (->) zugreifen möchte, statt über numerische oder assoziative Array-Indizes.
Der optionale Parameter row erlaubt bei Treibern mit scrollbarem Cursor das direkte Anspringen einer bestimmten Zeile (1-basierter Index). Wird er weggelassen oder auf -1 gesetzt, wird die nächste Zeile im Ergebnis geholt – das Standardverhalten für sequenzielle Iteration.
Die Funktion gibt false zurück, wenn keine weiteren Zeilen vorhanden sind oder ein Fehler aufgetreten ist. Dadurch eignet sie sich gut als Bedingung in einer while-Schleife, um alle Zeilen eines Ergebnisses zu durchlaufen.
Sie ist das ODBC-Äquivalent zu mysqli_fetch_object() oder PDOStatement::fetchObject() und sollte überall dort eingesetzt werden, wo objektorientierter Datenzugriff gegenüber Array-Zugriff bevorzugt wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges ODBC-Ergebnis-Handle, wie es von odbc_exec() oder odbc_execute() zurückgegeben wird. |
|
| $row | int | -1 | Optionale Zeilennummer (1-basiert) für scrollbare Cursor. Bei -1 (Standard) wird die nächste verfügbare Zeile sequenziell gelesen. |
Rückgabewert
stdClass-Objekt zurück, dessen Eigenschaften den Spaltennamen und -werten der aktuellen Ergebniszeile entsprechen. Gibt false zurück, wenn keine weiteren Zeilen vorhanden sind oder ein Fehler aufgetreten ist.Beispiele
Alle Zeilen einer ODBC-Abfrage als Objekte ausgeben
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}
$result = odbc_exec($conn, 'SELECT id, name, email FROM benutzer');
if (!$result) {
die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}
while ($row = odbc_fetch_object($result)) {
echo 'ID: ' . $row->id . PHP_EOL;
echo 'Name: ' . $row->name . PHP_EOL;
echo 'E-Mail: ' . $row->email . PHP_EOL;
echo '---' . PHP_EOL;
}
odbc_free_result($result);
odbc_close($conn);
Bestimmte Zeile über Zeilennummer direkt abrufen (scrollbarer Cursor)
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');
$result = odbc_exec($conn, 'SELECT id, name FROM produkte');
// Dritte Zeile direkt abrufen (1-basierter Index)
$row = odbc_fetch_object($result, 3);
if ($row !== false) {
echo 'Produkt: ' . $row->name . ' (ID: ' . $row->id . ')';
} else {
echo 'Zeile nicht gefunden.';
}
odbc_free_result($result);
odbc_close($conn);
// Wichtig · Fallstricke
Spaltennamen und Groß-/Kleinschreibung: Die Eigenschaftsnamen des zurückgegebenen Objekts richten sich nach den Spaltennamen, wie sie vom ODBC-Treiber zurückgegeben werden. Je nach Treiber und Datenbank können sie in Groß- oder Kleinbuchstaben vorliegen. Im Zweifelsfall sollten die tatsächlichen Spaltennamen per odbc_field_name() geprüft werden.
Scrollbare Cursor: Der Parameter row funktioniert nur, wenn der verwendete ODBC-Treiber scrollbare Cursor unterstützt. Bei nicht scrollbaren Cursorn wird dieser Parameter ignoriert oder führt zu einem Fehler.
Ressourcenfreigabe: Nach der Verarbeitung des Ergebnisses sollte odbc_free_result() aufgerufen werden, um Speicher freizugeben. Die Datenbankverbindung kann anschließend mit odbc_close() geschlossen werden.
Alternative: Wer Array-Zugriff bevorzugt, kann odbc_fetch_array() verwenden. Für einfachen zeilenweisen Zugriff ohne spezifischen Rückgabetyp steht odbc_fetch_row() in Kombination mit odbc_result() zur Verfügung.