Start · Sprachen · PHP · Referenz · oci_result

oci_result

Funktion

Gibt den Wert eines bestimmten Felds aus der zuletzt mit <code>oci_fetch()</code> abgerufenen Zeile eines Oracle-Ergebnisses zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_result(resource $statement, string|int $column): mixed

Beschreibung

oci_result() wird in Kombination mit oci_fetch() eingesetzt, um nach dem zeilenweisen Abruf einer Ergebnismenge auf einzelne Spalten zuzugreifen. Im Gegensatz zu oci_fetch_array() oder oci_fetch_assoc() holt man sich so gezielt nur die benötigten Felder, anstatt die gesamte Zeile als Array zu laden.

Der Parameter column kann entweder der Spaltenname als Zeichenkette (standardmäßig Großbuchstaben, wie von Oracle zurückgegeben) oder die 1-basierte Spaltenpositionsnummer als Integer sein. Diese Flexibilität ermöglicht sowohl benannten als auch positionellen Zugriff auf Felder.

Typische Einsatzszenarien sind Schleifen, in denen oci_fetch() wiederholt aufgerufen wird und pro Iteration nur ausgewählte Spalten ausgewertet werden. Das ist besonders dann sinnvoll, wenn dynamisch entschieden werden soll, welche Felder ausgelesen werden, ohne das gesamte Zeilen-Array zu materialisieren.

Für LOB-Spalten (CLOB, BLOB) gibt oci_result() ein OCI-LOB-Deskriptor-Objekt zurück, das separat gelesen werden muss. Für normale Spalten wird der Wert als PHP-Zeichenkette oder null bei NULL-Werten zurückgegeben.

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.
$column Pflicht string|int Der Spaltenname als Zeichenkette (üblicherweise in Großbuchstaben, z. B. 'EMPLOYEE_ID') oder die 1-basierte Spaltenpositionsnummer als Integer. Beim Spaltennamen wird Groß-/Kleinschreibung beachtet.

Rückgabewert

Typ
mixed
Beschreibung
Gibt den Spaltenwert der aktuellen Zeile zurück. Einfache Spaltentypen werden als string zurückgegeben, NULL-Werte als PHP-null. LOB-Spalten liefern ein OCI-LOB-Objekt. Bei einem Fehler wird false zurückgegeben.

Beispiele

Einzelne Felder per Spaltenname abrufen

<?php
$conn = oci_connect('hr', 'passwort', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT employee_id, last_name, salary FROM employees WHERE rownum <= 5');
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 ...

Positionsnummer statt Spaltenname verwenden

<?php
$conn = oci_connect('hr', 'passwort', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT department_id, department_name FROM departments WHERE rownum <= 3');
oci_execute($stid);

while (oci_fetch($stid)) {
    // Spalte 1 = department_id, Spalte 2 = department_name
    $dept_id   = oci_result($stid, 1);
    $dept_name = oci_result($stid, 2);
    echo "Abteilung $dept_id: $dept_name\n";
}

oci_free_statement($stid);
oci_close($conn);
?>
Abteilung 10: Administration Abteilung 20: Marketing Abteilung 30: Purchasing

// Wichtig · Fallstricke

Groß-/Kleinschreibung bei Spaltennamen: Oracle gibt Spaltennamen standardmäßig in Großbuchstaben zurück. Der Aufruf oci_result($stid, 'last_name') schlägt fehl — korrekt ist oci_result($stid, 'LAST_NAME'). Bei Aliasnamen in der SQL-Abfrage mit Anführungszeichen kann die Schreibung abweichen.

LOB-Spalten: Bei CLOB- oder BLOB-Spalten gibt oci_result() kein String, sondern ein OCI-LOB-Objekt zurück. Um den Inhalt zu lesen, muss anschließend die Methode ->load() oder ->read() auf dem Objekt aufgerufen werden.

Reihenfolge wichtig: oci_result() darf nur nach einem erfolgreichen oci_fetch()-Aufruf aufgerufen werden; andernfalls ist das Verhalten undefiniert. In modernen PHP-Projekten empfiehlt sich oft der direktere Einsatz von oci_fetch_assoc() oder oci_fetch_array(), wenn ohnehin alle Spalten benötigt werden.