Signatur
Beschreibung
oci_fetch_assoc() ruft die nächste Ergebniszeile einer zuvor ausgeführten Oracle-Datenbankabfrage ab und gibt sie als assoziatives Array zurück. Die Array-Schlüssel entsprechen den Spaltennamen der Abfrage, wobei die Namen grundsätzlich in Großbuchstaben zurückgegeben werden, unabhängig davon, wie sie in der SQL-Anweisung formuliert wurden.
Die Funktion ist eine Kurzschreibweise für oci_fetch_array($statement, OCI_ASSOC + OCI_RETURN_NULLS). Sie eignet sich besonders dann, wenn ausschließlich benannter Zugriff auf Spalten benötigt wird und numerische Indizes irrelevant sind, da sie den Code lesbarer macht.
Ein wiederholter Aufruf der Funktion in einer Schleife erlaubt das zeilenweise Durchlaufen eines kompletten Ergebnissets. Gibt es keine weiteren Zeilen, wird false zurückgegeben, was den typischen while-Loop beendet. NULL-Werte aus der Datenbank werden als PHP-null geliefert.
Für große Ergebnismengen ist der zeilenweise Abruf mit oci_fetch_assoc() speichereffizienter als das vollständige Laden aller Zeilen auf einmal, da jeweils nur eine Zeile im Speicher gehalten wird.
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
false zurück, wenn keine weiteren Zeilen vorhanden sind oder ein Fehler aufgetreten ist.Beispiele
Alle Zeilen einer Tabelle zeilenweise ausgeben
<?php
$conn = oci_connect('meinBenutzer', 'meinPasswort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$sql = 'SELECT employee_id, first_name, last_name FROM employees ORDER BY employee_id';
$stid = oci_parse($conn, $sql);
oci_execute($stid);
while ($row = oci_fetch_assoc($stid)) {
echo $row['EMPLOYEE_ID'] . ' | '
. $row['FIRST_NAME'] . ' '
. $row['LAST_NAME'] . PHP_EOL;
}
oci_free_statement($stid);
oci_close($conn);
Ergebnisse als HTML-Tabelle darstellen
<?php
$conn = oci_connect('meinBenutzer', 'meinPasswort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$stid = oci_parse($conn, 'SELECT department_id, department_name FROM departments');
oci_execute($stid);
echo '<table border="1">';
echo '<tr><th>ID</th><th>Abteilung</th></tr>';
while ($row = oci_fetch_assoc($stid)) {
echo '<tr>';
echo '<td>' . htmlspecialchars((string)$row['DEPARTMENT_ID']) . '</td>';
echo '<td>' . htmlspecialchars((string)$row['DEPARTMENT_NAME']) . '</td>';
echo '</tr>';
}
echo '</table>';
oci_free_statement($stid);
oci_close($conn);
// Wichtig · Fallstricke
Spaltennamen in Großbuchstaben: Oracle liefert Spaltennamen standardmäßig in Großbuchstaben. Beim Zugriff auf Array-Schlüssel muss daher stets auf Großschreibung geachtet werden, z. B. $row['FIRST_NAME'] und nicht $row['first_name'].
NULL-Werte: Datenbank-NULL-Werte werden als PHP-null zurückgegeben. Ein direktes Ausgeben ohne Prüfung kann zu Notices führen; verwende isset() oder den Null-Coalescing-Operator ??.
Ressourcenfreigabe: Nach dem Verarbeiten der Ergebnisse sollten oci_free_statement() und oci_close() aufgerufen werden, um Datenbankressourcen zeitnah freizugeben.
Erweiterung: Diese Funktion setzt die OCI8-Erweiterung voraus (ext/oci8). Sie muss bei der PHP-Kompilierung aktiviert oder als gemeinsame Bibliothek geladen sein.