Signatur
Beschreibung
db2_num_fields() liefert die Anzahl der Spalten, die ein ausgeführtes oder vorbereitetes DB2-Statement zurückgibt. Die Funktion ist besonders nützlich, wenn Ergebnisse dynamisch verarbeitet werden sollen, ohne die Spaltenanzahl im Voraus zu kennen – beispielsweise beim Aufbau generischer Ausgabe-Routinen oder Export-Funktionen.
Das übergebene Statement-Handle muss zuvor mit db2_exec(), db2_execute() oder db2_prepare() erzeugt worden sein. Bei db2_prepare() ist die Feldanzahl auch bereits vor dem eigentlichen Ausführen des Statements verfügbar, sofern die Datenbank entsprechende Metadaten liefert.
Die Funktion gibt im Fehlerfall (z. B. bei einem ungültigen Statement-Handle oder einem Statement, das kein Ergebnis-Set zurückliefert) false zurück. Dies sollte stets geprüft werden, um Folgefehler in der Spaltenverarbeitung zu vermeiden.
Typischer Einsatz ist das Iterieren über alle Spalten eines Ergebnisses mithilfe einer for-Schleife in Kombination mit db2_field_name() oder db2_result().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $stmt Pflicht | resource | Ein gültiges Statement-Handle, das durch db2_exec(), db2_prepare() oder db2_execute() erzeugt wurde und ein Ergebnis-Set repräsentiert. |
Rückgabewert
int zurück. Bei einem ungültigen Statement-Handle oder einem Statement ohne Ergebnis-Set wird false zurückgegeben.Beispiele
Feldanzahl eines ausgeführten SELECT-Statements ermitteln
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');
if ($conn) {
$sql = 'SELECT id, vorname, nachname, email FROM kunden';
$stmt = db2_exec($conn, $sql);
if ($stmt) {
$anzahl = db2_num_fields($stmt);
echo "Anzahl der Felder: " . $anzahl . PHP_EOL;
} else {
echo "Fehler beim Ausführen: " . db2_stmt_errormsg();
}
db2_close($conn);
}
Generische Ausgabe aller Spalten eines Ergebnisses
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');
if ($conn) {
$stmt = db2_exec($conn, 'SELECT * FROM produkte FETCH FIRST 5 ROWS ONLY');
if ($stmt) {
$feldanzahl = db2_num_fields($stmt);
// Spaltenköpfe ausgeben
$kopfzeile = [];
for ($i = 0; $i < $feldanzahl; $i++) {
$kopfzeile[] = db2_field_name($stmt, $i);
}
echo implode(' | ', $kopfzeile) . PHP_EOL;
echo str_repeat('-', 60) . PHP_EOL;
// Datenzeilen ausgeben
while ($zeile = db2_fetch_array($stmt)) {
echo implode(' | ', $zeile) . PHP_EOL;
}
}
db2_close($conn);
}
// Wichtig · Fallstricke
Wichtig: db2_num_fields() ist ausschließlich für Statements sinnvoll, die ein Ergebnis-Set zurückliefern (SELECT). Bei DML-Statements (INSERT, UPDATE, DELETE) gibt die Funktion false zurück, da kein Ergebnis-Set vorliegt.
Das IBM DB2-Erweiterungsmodul (ibm_db2) muss in PHP installiert und aktiviert sein. Die Funktion steht nicht in einer Standard-PHP-Installation zur Verfügung.