Start · Sprachen · PHP · Referenz · oci_fetch

oci_fetch

Funktion

Ruft die nächste Ergebniszeile eines OCI-Statements in den internen PHP-Puffer ab, sodass sie mit <code>oci_result()</code> ausgelesen werden kann.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_fetch(resource $statement): bool

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

Typ
bool
Beschreibung
Gibt 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);
?>
ID: 100 | Name: King | Gehalt: 24000 ID: 101 | Name: Kochhar | Gehalt: 17000 ID: 102 | Name: De Haan | Gehalt: 17000 ID: 103 | Name: Hunold | Gehalt: 9000 ID: 104 | Name: Ernst | Gehalt: 6000

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);
?>
<ul> <li>Administration</li> <li>Marketing</li> <li>Purchasing</li> ...</ul>

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