Start · Sprachen · PHP · Referenz · oci_num_fields

oci_num_fields

Funktion

Gibt die Anzahl der Spalten (Felder) zurück, die ein ausgeführtes OCI-Statement im Ergebnis enthält.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_num_fields(resource $statement): int

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

Typ
int
Beschreibung
Gibt die Anzahl der Spalten im Ergebnis-Set zurück. Liefert 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);
Anzahl der Spalten: 4

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);
Die Abfrage liefert 3 Spalten: Spalte 1: DEPARTMENT_ID (NUMBER) Spalte 2: DEPARTMENT_NAME (VARCHAR2) Spalte 3: LOCATION_ID (NUMBER)

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