Signatur
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
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);
?>
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 <= 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.