Signatur
Beschreibung
oci_fetch() liest die nächste Zeile eines Oracle-Abfrageergebnisses in den internen Zeilenpuffer von PHP. Anschließend können die einzelnen Spaltenwerte dieser Zeile über oci_result() abgefragt werden. Die Funktion gibt true zurück, solange eine weitere Zeile vorhanden ist, und false, wenn alle Zeilen verarbeitet wurden oder ein Fehler auftritt.
Diese Funktion wird typischerweise in einer while-Schleife eingesetzt: Solange oci_fetch() true zurückliefert, werden die Spaltenwerte der aktuellen Zeile mit oci_result() ausgelesen. Dieses Muster bietet sich an, wenn nur bestimmte Spalten benötigt werden oder eine präzise Kontrolle über den Abruf gewünscht wird.
Für die meisten Anwendungsfälle sind die Komfortfunktionen oci_fetch_array(), oci_fetch_assoc() oder oci_fetch_object() praktikabler, da sie die Zeile direkt als Array oder Objekt zurückgeben. oci_fetch() ist jedoch dann sinnvoll, wenn gezielt mit oci_result() auf einzelne Spalten zugegriffen werden soll.
Das Statement muss zuvor mit oci_execute() ausgeführt worden sein, bevor oci_fetch() aufgerufen werden kann.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges OCI-Statement-Handle, das zuvor mit oci_parse() erstellt und mit oci_execute() ausgeführt wurde. |
Rückgabewert
true zurück, wenn eine weitere Zeile erfolgreich in den internen Puffer geladen wurde. Gibt false zurück, wenn keine weiteren Zeilen vorhanden sind oder ein Fehler aufgetreten ist.Beispiele
Zeilenweise Ausgabe mit oci_fetch und oci_result
<?php
$conn = oci_connect('hr', 'geheim', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$sql = 'SELECT employee_id, last_name, salary FROM employees WHERE rownum <= 5';
$stid = oci_parse($conn, $sql);
oci_execute($stid);
while (oci_fetch($stid)) {
$id = oci_result($stid, 'EMPLOYEE_ID');
$name = oci_result($stid, 'LAST_NAME');
$salary = oci_result($stid, 'SALARY');
echo "ID: $id | Name: $name | Gehalt: $salary\n";
}
oci_free_statement($stid);
oci_close($conn);
?>
Selektiver Spaltenzugriff per Spaltenindex
<?php
$conn = oci_connect('hr', 'geheim', 'localhost/XE');
$stid = oci_parse($conn, 'SELECT department_id, department_name FROM departments');
oci_execute($stid);
echo "<ul>\n";
while (oci_fetch($stid)) {
// Spaltenzugriff per 1-basiertem Index
$deptName = oci_result($stid, 2);
echo '<li>' . htmlspecialchars($deptName, ENT_QUOTES, 'UTF-8') . "</li>\n";
}
echo "</ul>\n";
oci_free_statement($stid);
oci_close($conn);
?>
// Wichtig · Fallstricke
Reihenfolge der Aufrufe: oci_fetch() muss nach oci_execute() aufgerufen werden. Wird das Statement nicht ausgeführt, gibt die Funktion false zurück und es entsteht ein OCI-Fehler.
Spaltenname in Großbuchstaben: Bei oci_result() müssen Spaltennamen in Großbuchstaben übergeben werden, da Oracle Bezeichner standardmäßig in Großbuchstaben speichert.
Alternativen bevorzugen: Für den Großteil der Anwendungsfälle sind oci_fetch_array() oder oci_fetch_assoc() komfortabler und weniger fehleranfällig, da kein manueller Aufruf von oci_result() nötig ist.
Ressourcen freigeben: Nach der Verarbeitung sollte das Statement mit oci_free_statement() und die Verbindung mit oci_close() freigegeben werden, um Speicher und Datenbankverbindungen nicht unnötig zu belegen.