Signatur
Beschreibung
odbc_field_type() ermittelt den SQL-Datentyp einer Spalte im Ergebnis einer ODBC-Abfrage. Der zurückgegebene Typ ist ein vom ODBC-Treiber gelieferter Zeichenketten-Name wie z. B. VARCHAR, INTEGER, TIMESTAMP oder DECIMAL. Der genaue Bezeichner kann je nach Datenbank und ODBC-Treiber variieren.
Die Funktion ist besonders nützlich, wenn der Aufbau einer Ergebnismenge zur Laufzeit unbekannt ist und dynamisch verarbeitet werden muss, z. B. beim Aufbau allgemeiner Datenbankabstraktionsschichten oder beim Export von Daten in typsensitive Formate wie CSV mit Typ-Metadaten.
Felder werden über ihren 1-basierten Index adressiert. In Kombination mit odbc_num_fields() lässt sich bequem über alle Spalten eines Ergebnisses iterieren, um vollständige Schema-Informationen zu sammeln.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Eine gültige ODBC-Ergebnisressource, die von Funktionen wie odbc_exec() oder odbc_execute() zurückgegeben wurde. |
|
| $field Pflicht | int | Der 1-basierte Index der Spalte, deren Datentyp abgefragt werden soll. Der erste Feld hat den Index 1. |
Rückgabewert
VARCHAR, INTEGER). Im Fehlerfall wird false zurückgegeben, etwa wenn der Feldindex außerhalb des gültigen Bereichs liegt.Beispiele
Datentypen aller Spalten eines Abfrageergebnisses ausgeben
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}
$result = odbc_exec($conn, 'SELECT id, name, erstellt_am FROM kunden');
if (!$result) {
die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}
$anzahlFelder = odbc_num_fields($result);
for ($i = 1; $i <= $anzahlFelder; $i++) {
$feldName = odbc_field_name($result, $i);
$feldTyp = odbc_field_type($result, $i);
echo "Feld $i: $feldName => Typ: $feldTyp\n";
}
odbc_close($conn);
Typspezifische Verarbeitung von Ergebnisspalten
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
$result = odbc_exec($conn, 'SELECT * FROM produkte');
$anzahlFelder = odbc_num_fields($result);
$schema = [];
for ($i = 1; $i <= $anzahlFelder; $i++) {
$schema[] = [
'name' => odbc_field_name($result, $i),
'typ' => odbc_field_type($result, $i),
'laenge' => odbc_field_len($result, $i),
];
}
foreach ($schema as $spalte) {
$typOberfall = strtoupper($spalte['typ']);
if (str_contains($typOberfall, 'INT')) {
echo "{$spalte['name']} ist ein Integer-Feld.\n";
} elseif (str_contains($typOberfall, 'CHAR') || str_contains($typOberfall, 'TEXT')) {
echo "{$spalte['name']} ist ein Text-Feld (max. {$spalte['laenge']} Zeichen).\n";
} else {
echo "{$spalte['name']} hat Typ: {$spalte['typ']}\n";
}
}
odbc_close($conn);
// Wichtig · Fallstricke
Treiber-Abhängigkeit: Die zurückgegebenen Typbezeichner sind nicht standardisiert und hängen vom verwendeten ODBC-Treiber und der Datenbank ab. Ein MySQL-ODBC-Treiber kann andere Bezeichnungen verwenden als ein MSSQL- oder Oracle-Treiber. Vergleiche sollten daher möglichst groß-/kleinschreibungsunabhängig mit strtoupper() durchgeführt werden.
1-basierte Indizes: Im Gegensatz zu vielen PHP-Arrays beginnt die Feldnummerierung bei 1, nicht bei 0. Ein Index von 0 führt zu einem Fehler bzw. false als Rückgabewert.