Signatur
Beschreibung
oci_num_fields() ermittelt die Anzahl der Spalten, die ein ausgeführtes Oracle-Statement (SELECT-Abfrage) zurückliefert. Die Funktion ist besonders nützlich, wenn die Struktur einer Abfrage zur Laufzeit unbekannt ist oder dynamisch verarbeitet werden soll – etwa beim Aufbau generischer Ausgabe-Routinen oder beim Iterieren über alle Felder einer Zeile.
Der Aufruf setzt voraus, dass das Statement bereits mit oci_execute() ausgeführt wurde. Wird die Funktion auf ein noch nicht ausgeführtes Statement angewendet, gibt sie 0 zurück. Sie eignet sich gut in Kombination mit oci_field_name() oder oci_field_type(), um Meta-Informationen zu allen Spalten abzufragen.
Die zurückgegebene Zahl entspricht der Anzahl der im SELECT definierten Spalten und nicht der Anzahl der Zeilen im Ergebnis. Für die Zeilenanzahl steht oci_num_rows() zur Verfügung.
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. |
Rückgabewert
0, wenn das Statement noch nicht ausgeführt wurde oder keine Spalten enthält.Beispiele
Spaltenanzahl einer SELECT-Abfrage ermitteln
<?php
$conn = oci_connect('meinuser', 'meinpasswort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
$sql = 'SELECT employee_id, first_name, last_name, salary FROM employees WHERE ROWNUM <= 5';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
$anzahlSpalten = oci_num_fields($stmt);
echo "Anzahl der Spalten: " . $anzahlSpalten . PHP_EOL;
oci_free_statement($stmt);
oci_close($conn);
Dynamische Spaltenausgabe mit oci_num_fields und oci_field_name
<?php
$conn = oci_connect('meinuser', 'meinpasswort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
$sql = 'SELECT department_id, department_name, location_id FROM departments';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
$anzahlSpalten = oci_num_fields($stmt);
echo "Die Abfrage liefert {$anzahlSpalten} Spalten:" . PHP_EOL;
for ($i = 1; $i <= $anzahlSpalten; $i++) {
$feldname = oci_field_name($stmt, $i);
$feldtyp = oci_field_type($stmt, $i);
echo " Spalte {$i}: {$feldname} ({$feldtyp})" . PHP_EOL;
}
oci_free_statement($stmt);
oci_close($conn);
// Wichtig · Fallstricke
Hinweis zur Ausführungsreihenfolge: oci_num_fields() muss nach oci_execute() aufgerufen werden. Ein Aufruf vor der Ausführung gibt 0 zurück, auch wenn das Statement syntaktisch korrekt ist.
Nur für SELECT: Die Funktion ist sinnvoll ausschließlich für SELECT-Statements. Bei DML-Statements (INSERT, UPDATE, DELETE) oder DDL gibt sie ebenfalls 0 zurück, da diese kein Ergebnis-Set mit Spalten erzeugen.
Die Spaltenindizes für verwandte Funktionen wie oci_field_name() beginnen bei 1, nicht bei 0.