Signatur
Beschreibung
oci_fetch_row() ruft die nächste Zeile aus dem Ergebnis einer Oracle-Datenbankabfrage ab und gibt sie als Array zurück, dessen Schlüssel bei 0 beginnen. Jeder Aufruf der Funktion rückt den internen Zeiger um eine Zeile weiter, sodass man in einer Schleife alle Ergebniszeilen nacheinander verarbeiten kann.
Im Gegensatz zu oci_fetch_assoc() werden die Spalten nicht mit ihren Namen, sondern ausschließlich mit numerischen Indizes zurückgegeben. Das ist geringfügig schneller und eignet sich gut, wenn die Spaltenreihenfolge bekannt und stabil ist oder wenn das Ergebnis sequenziell verarbeitet wird.
Gibt es keine weitere Zeile mehr (Ende des Ergebnisses) oder tritt ein Fehler auf, wird false zurückgegeben. Das ermöglicht das direkte Einsetzen des Rückgabewerts als Schleifenbedingung.
Bevor oci_fetch_row() aufgerufen werden kann, muss das Statement mit oci_execute() ausgeführt worden sein. NULL-Werte aus Oracle werden als PHP-null zurückgegeben; LOB-Spalten liefern ein OCI-Lob-Objekt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges OCI8-Statement-Handle, das zuvor mit oci_parse() erzeugt und mit oci_execute() ausgeführt wurde. |
Rückgabewert
false zurückgegeben.Beispiele
Alle Zeilen einer Abfrage iterieren
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
$sql = 'SELECT mitarbeiter_id, vorname, nachname FROM mitarbeiter ORDER BY nachname';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
while ($row = oci_fetch_row($stmt)) {
// $row[0] = mitarbeiter_id, $row[1] = vorname, $row[2] = nachname
echo $row[0] . ': ' . $row[1] . ' ' . $row[2] . PHP_EOL;
}
oci_free_statement($stmt);
oci_close($conn);
Ergebnisse in eine HTML-Tabelle ausgeben
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
$stmt = oci_parse($conn, 'SELECT produkt_id, bezeichnung, preis FROM produkte WHERE aktiv = 1');
oci_execute($stmt);
echo '<table border="1">';
echo '<tr><th>ID</th><th>Bezeichnung</th><th>Preis</th></tr>';
while ($row = oci_fetch_row($stmt)) {
echo '<tr>';
foreach ($row as $wert) {
echo '<td>' . htmlspecialchars((string)$wert) . '</td>';
}
echo '</tr>';
}
echo '</table>';
oci_free_statement($stmt);
oci_close($conn);
// Wichtig · Fallstricke
Sicherheit: Verwende stets oci_bind_by_name() für Benutzereingaben in SQL-Abfragen, um SQL-Injection zu verhindern. Vertraue niemals direkt in SQL eingebetteten Eingaben.
Ausgabe mit htmlspecialchars(): Alle aus der Datenbank gelesenen Werte, die in HTML ausgegeben werden, sollten mit htmlspecialchars() maskiert werden, um XSS zu vermeiden.
Spaltenindizes: Die Indizes beginnen bei 0. Ändert sich die Spaltenreihenfolge in der SQL-Abfrage, müssen alle Indexzugriffe im PHP-Code angepasst werden. Für robusteren Code ist oci_fetch_assoc() oder oci_fetch_array() mit OCI_ASSOC zu bevorzugen.
Große Ergebnismengen: Bei sehr großen Ergebnismengen empfiehlt sich die Verwendung von oci_fetch_all() kombiniert mit OCI_FETCHSTATEMENT_BY_ROW oder serverseitiges Paging via ROWNUM bzw. FETCH FIRST n ROWS ONLY (ab Oracle 12c).