Start · Sprachen · PHP · Referenz · oci_fetch_row

oci_fetch_row

Funktion

Liest die nächste Zeile aus einem OCI8-Statement-Ergebnis und gibt sie als numerisch indiziertes Array zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_fetch_row(resource $statement): array|false

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

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array zurück, das die Spaltenwerte der aktuellen Zeile enthält (Index 0 bis n−1). Wenn keine weitere Zeile vorhanden ist oder ein Fehler auftritt, wird 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);
42: Max Mustermann 17: Anna Schmidt ...

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);
<table border="1"><tr><th>ID</th><th>Bezeichnung</th><th>Preis</th></tr><tr><td>1</td><td>Widget A</td><td>9.99</td></tr>...</table>

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