Signatur
Beschreibung
oci_fetch_object() ruft die nächste Zeile aus einem ausgeführten Oracle-Statement ab und gibt sie als stdClass-Objekt zurück. Die Spaltennamen der Abfrage werden dabei zu Eigenschaftsnamen des Objekts. Dies ermöglicht einen objektorientierten Zugriff auf Abfrageergebnisse, der in vielen modernen PHP-Anwendungen bevorzugt wird.
Spaltennamen werden von Oracle standardmäßig in Großbuchstaben zurückgegeben. Das bedeutet, dass die Eigenschaftsnamen des zurückgegebenen Objekts ebenfalls in Großbuchstaben vorliegen, sofern keine Aliasse mit expliziten Anführungszeichen im SQL verwendet werden. Beispiel: Eine Spalte employee_name wird als $row->EMPLOYEE_NAME angesprochen.
Die Funktion eignet sich besonders dann, wenn Datensätze als Objekte weiterverarbeitet werden sollen – etwa bei der Übergabe an typisierte Methoden oder Templates. Sie wird in einer Schleife eingesetzt, bis sie false zurückgibt, was das Ende der Ergebnismenge signalisiert.
oci_fetch_object() ist funktional vergleichbar mit oci_fetch_assoc(), liefert jedoch statt eines assoziativen Arrays ein Objekt. Bei großen Datenmengen kann es sinnvoller sein, Zeilen schrittweise per Schleife abzurufen, anstatt alle Zeilen auf einmal mit oci_fetch_all() zu laden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges OCI-Statement-Handle, das zuvor mit oci_parse() erzeugt und mit oci_execute() ausgeführt wurde. |
Rückgabewert
stdClass-Objekt zurück, dessen Eigenschaften den Spaltenwerten der aktuellen Zeile entsprechen. Gibt false zurück, wenn keine weiteren Zeilen vorhanden sind oder ein Fehler aufgetreten ist.Beispiele
Alle Zeilen einer Abfrage als Objekte auslesen
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
$sql = 'SELECT employee_id, first_name, last_name FROM employees ORDER BY employee_id';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
while ($row = oci_fetch_object($stmt)) {
// Oracle gibt Spaltennamen in Großbuchstaben zurück
echo $row->EMPLOYEE_ID . ': ' . $row->FIRST_NAME . ' ' . $row->LAST_NAME . PHP_EOL;
}
oci_free_statement($stmt);
oci_close($conn);
Spaltennamen via Alias in Kleinbuchstaben verwenden
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
// Durch den Alias in doppelten Anführungszeichen werden Kleinbuchstaben erzwungen
$sql = 'SELECT employee_id AS "id", first_name AS "firstName", salary AS "salary" FROM employees WHERE rownum <= 3';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
while ($row = oci_fetch_object($stmt)) {
printf("ID: %d | Name: %s | Gehalt: %.2f\n",
$row->id,
$row->firstName,
$row->salary
);
}
oci_free_statement($stmt);
oci_close($conn);
// Wichtig · Fallstricke
Großschreibung der Spaltennamen: Oracle gibt Spaltennamen standardmäßig in Großbuchstaben zurück. Zugriffe auf Objekteigenschaften müssen daher entsprechend in Großbuchstaben erfolgen (z. B. $row->LAST_NAME), es sei denn, im SQL werden explizit in Anführungszeichen gesetzte Aliasse verwendet.
LOB-Spalten: Bei der Rückgabe von LOB-Werten (z. B. CLOB) enthält die Eigenschaft ein OCI-LOB-Deskriptor-Objekt. Der eigentliche Inhalt muss mit der Methode load() oder read() des Deskriptors abgerufen werden.
NULL-Werte: Datenbankfelder mit dem Wert NULL werden in PHP als null zurückgegeben.
Performance: Bei sehr großen Ergebnismengen empfiehlt es sich, oci_fetch_object() in Kombination mit dem Prefetch-Mechanismus von OCI8 zu nutzen oder auf oci_fetch_all() zurückzugreifen, wenn alle Daten auf einmal benötigt werden.