Start · Sprachen · PHP · Referenz · oci_fetch_assoc

oci_fetch_assoc

Funktion

Liefert die nächste Zeile einer Oracle-Abfrage als assoziatives Array mit Spaltennamen als Schlüssel.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_fetch_assoc(resource $statement): array|false

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

Typ
array|false
Beschreibung
Gibt ein assoziatives Array zurück, dessen Schlüssel die Spaltennamen (in Großbuchstaben) und dessen Werte die Zelleninhalte der aktuellen Zeile sind. Gibt 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);
100 | Steven King 101 | Neena Kochhar 102 | Lex De Haan ...

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);
<table border="1"><tr><th>ID</th><th>Abteilung</th></tr><tr><td>10</td><td>Administration</td></tr>...</table>

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