Start · Sprachen · PHP · Referenz · oci_field_name

oci_field_name

Funktion

Gibt den Namen (als Zeichenkette) eines Felds aus einem Oracle-Statement-Ergebnis zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_field_name(resource $statement, int|string $column): string|false

Beschreibung

oci_field_name() ermittelt den Spaltennamen eines Oracle-Abfrageergebnisses anhand der Spaltenposition (1-basierter Index) oder des Spaltennamens. Die Funktion ist Teil der OCI8-Erweiterung für Oracle-Datenbankverbindungen und wird typischerweise verwendet, um Spaltenmetadaten nach der Ausführung eines SELECT-Statements zu inspizieren.

Die Funktion gibt immer den Namen in Großbuchstaben zurück, da Oracle Spaltennamen intern in Großschreibung speichert. Aliase, die in der SQL-Abfrage mit AS definiert werden, werden ebenfalls als Großbuchstaben zurückgegeben.

Typische Anwendungsfälle sind die dynamische Generierung von HTML-Tabellenkopfzeilen, die Verarbeitung von Abfrageergebnissen ohne vorherige Kenntnis der Spaltenstruktur sowie allgemeine Datenbankmetadaten-Abfragen. In Kombination mit oci_num_fields() lässt sich die gesamte Spaltenstruktur eines Ergebnisses iterieren.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI8-Statement-Handle, das mit oci_parse() erzeugt und mit oci_execute() ausgeführt wurde.
$column Pflicht int|string Der 1-basierte Index der Spalte (z. B. 1 für die erste Spalte) oder der Spaltenname als Zeichenkette. Bei Übergabe als Zeichenkette wird Groß-/Kleinschreibung ignoriert.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Spaltennamen als Zeichenkette in Großbuchstaben zurück. Im Fehlerfall (ungültiger Index oder Statement) wird false zurückgegeben.

Beispiele

Spaltennamen eines SELECT-Statements ausgeben

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

$sql = 'SELECT mitarbeiter_id, vorname, nachname FROM mitarbeiter';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$num_cols = oci_num_fields($stmt);
echo "Spaltennamen:" . PHP_EOL;
for ($i = 1; $i <= $num_cols; $i++) {
    echo $i . ': ' . oci_field_name($stmt, $i) . PHP_EOL;
}

oci_free_statement($stmt);
oci_close($conn);
?>
Spaltennamen: 1: MITARBEITER_ID 2: VORNAME 3: NACHNAME

Dynamische HTML-Tabelle mit Spaltenköpfen erzeugen

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

$sql = 'SELECT abt_id AS id, bezeichnung, ort FROM abteilungen WHERE ROWNUM &lt;= 5';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$num_cols = oci_num_fields($stmt);

echo '<table border="1">';
echo '<tr>';
for ($i = 1; $i <= $num_cols; $i++) {
    echo '<th>' . htmlspecialchars(oci_field_name($stmt, $i)) . '</th>';
}
echo '</tr>';

while ($row = oci_fetch_array($stmt, OCI_ASSOC + OCI_RETURN_NULLS)) {
    echo '<tr>';
    foreach ($row as $val) {
        echo '<td>' . htmlspecialchars((string)$val) . '</td>';
    }
    echo '</tr>';
}

echo '</table>';

oci_free_statement($stmt);
oci_close($conn);
?>

// Wichtig · Fallstricke

Indexierung: Die Spaltenindizes sind 1-basiert (nicht 0-basiert wie in vielen anderen PHP-Funktionen). Ein Index von 0 führt zu false.

Großschreibung: Oracle gibt Spaltennamen grundsätzlich in Großbuchstaben zurück. Auch selbst definierte Aliase mit AS werden in Großbuchstaben umgewandelt. Sollen Alias-Namen in gemischter Schreibweise verwendet werden, müssen sie im SQL mit Anführungszeichen notiert werden, z. B. SELECT vorname AS "Vorname" FROM ....

Voraussetzung: Das Statement muss mit oci_execute() ausgeführt worden sein, bevor Feldmetadaten abgefragt werden können. Andernfalls gibt die Funktion false zurück.