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