Start · Sprachen · PHP · Referenz · odbc_num_fields

odbc_num_fields

Funktion

Gibt die Anzahl der Spalten (Felder) in einem ODBC-Ergebnis-Statement zurück.

Kategorie: db

Signatur

odbc_num_fields(resource $statement): int

Beschreibung

odbc_num_fields() ermittelt, wie viele Spalten ein ODBC-Abfrageergebnis enthält. Die Funktion wird typischerweise nach dem Ausführen einer SELECT-Abfrage mit odbc_exec() oder odbc_execute() verwendet, um die Struktur des Ergebnisses programmatisch zu analysieren.

Der Rückgabewert ist besonders nützlich, wenn Tabellenspalten dynamisch iteriert werden sollen – etwa beim generischen Ausgeben von Tabelleninhalten, ohne die genaue Spaltenstruktur im Voraus zu kennen. In Kombination mit odbc_field_name() und odbc_result() lässt sich so ein vollständiger Ergebnis-Iterator aufbauen.

Wichtig: Die Funktion liefert -1, wenn ein Fehler aufgetreten ist, und funktioniert ausschließlich mit einem gültigen ODBC-Ergebnis-Handle, das durch eine Abfrage mit Rückgabespalten erzeugt wurde. Bei reinen DML-Statements (INSERT, UPDATE, DELETE) ohne Rückgabe-Spalten ist das Verhalten undefiniert.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges ODBC-Ergebnis-Handle, das zuvor mit odbc_exec(), odbc_execute() oder einer ähnlichen ODBC-Funktion erzeugt wurde.

Rückgabewert

Typ
int
Beschreibung
Gibt die Anzahl der Spalten im Ergebnis zurück. Bei einem Fehler oder einem ungültigen Statement wird -1 zurückgegeben.

Beispiele

Spaltenzahl einer ODBC-Abfrage ermitteln

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}

$result = odbc_exec($conn, 'SELECT id, name, email FROM benutzer');
if (!$result) {
    die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}

$anzahlSpalten = odbc_num_fields($result);
echo "Anzahl der Spalten: " . $anzahlSpalten . PHP_EOL;

odbc_free_result($result);
odbc_close($conn);
Anzahl der Spalten: 3

Dynamische Tabellenausgabe aller Spalten

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

$result = odbc_exec($conn, 'SELECT * FROM produkte');
if (!$result) {
    die('Abfrage fehlgeschlagen');
}

$anzahlSpalten = odbc_num_fields($result);

// Spaltennamen ausgeben
echo "<tr>";
for ($i = 1; $i <= $anzahlSpalten; $i++) {
    echo "<th>" . htmlspecialchars(odbc_field_name($result, $i)) . "</th>";
}
echo "</tr>" . PHP_EOL;

// Zeilen ausgeben
while (odbc_fetch_row($result)) {
    echo "<tr>";
    for ($i = 1; $i <= $anzahlSpalten; $i++) {
        echo "<td>" . htmlspecialchars((string) odbc_result($result, $i)) . "</td>";
    }
    echo "</tr>" . PHP_EOL;
}

odbc_free_result($result);
odbc_close($conn);

// Wichtig · Fallstricke

Hinweis zur Spaltenindizierung: Anders als in vielen PHP-Arrays beginnt die Spaltenindizierung bei ODBC-Funktionen wie odbc_field_name() bei 1, nicht bei 0. Schleifenkonstrukte sollten entsprechend mit $i = 1 starten und bis einschließlich odbc_num_fields() laufen.

DML-Statements: Bei INSERT-, UPDATE- oder DELETE-Abfragen ohne Rückgabe-Spalten sollte odbc_num_fields() nicht verwendet werden, da das Ergebnis-Handle in diesem Fall nicht auf Spaltendaten ausgerichtet ist. Verwende stattdessen odbc_num_rows() für die Anzahl betroffener Zeilen.