Start · Sprachen · PHP · Referenz · odbc_field_type

odbc_field_type

Funktion

Gibt den SQL-Datentyp eines bestimmten Ergebnisfeldes einer ODBC-Abfrage als Zeichenkette zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_field_type(resource $statement, int $field): string|false

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

Typ
string|false
Beschreibung
Gibt den Datentyp-Namen des angegebenen Feldes als Zeichenkette zurück (z. B. 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);
Feld 1: id => Typ: INTEGER Feld 2: name => Typ: VARCHAR Feld 3: erstellt_am => Typ: TIMESTAMP

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);
id ist ein Integer-Feld. bezeichnung ist ein Text-Feld (max. 255 Zeichen). preis hat Typ: DECIMAL

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