Signatur
Beschreibung
odbc_columns() ruft über die ODBC-Schnittstelle Metadaten zu Spalten einer Datenbanktabelle ab. Die Funktion gibt eine ODBC-Ergebnisressource zurück, die mit den üblichen ODBC-Fetch-Funktionen wie odbc_fetch_row() oder odbc_result() ausgewertet werden kann. So lassen sich Spaltenname, Datentyp, Nullbarkeit und weitere Eigenschaften ermitteln.
Die Parameter catalog, schema, table und column akzeptieren SQL-Suchmuster (Wildcards % und _), sofern der zugrunde liegende ODBC-Treiber dies unterstützt. Durch das Übergeben von null oder einem Leerstring kann auf eine Filterung über einen Parameter verzichtet werden.
Typische Einsatzgebiete sind das dynamische Erkunden eines Datenbankschemas, das automatische Generieren von Formularen oder Validierungsregeln, sowie Datenbankmigrationstools, die ohne hartkodiertes Schema auskommen müssen.
Die zurückgegebene Ergebnismenge enthält unter anderem die Spalten TABLE_CAT, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, DATA_TYPE, TYPE_NAME, COLUMN_SIZE, NULLABLE und weitere, die vom ODBC-Standard definiert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $odbc Pflicht | resource | Eine aktive ODBC-Verbindungsressource, die zuvor mit odbc_connect() oder odbc_pconnect() erstellt wurde. |
|
| $catalog | string | null | Der Name des Katalogs (Datenbankname). null oder Leerstring, um alle Kataloge einzubeziehen. |
| $schema | string | null | Das Datenbankschema (Besitzer/Namespace). Wildcards (%, _) sind erlaubt. null oder Leerstring für alle Schemata. |
| $table | string | null | Der Tabellenname, dessen Spalten aufgelistet werden sollen. Wildcards (%, _) sind erlaubt. null oder Leerstring für alle Tabellen. |
| $column | string | null | Ein Filter für den Spaltennamen. Wildcards (%, _) sind erlaubt. null oder Leerstring für alle Spalten. |
Rückgabewert
odbc_fetch_row(), odbc_result() usw. ausgewertet werden kann. Bei einem Fehler wird false zurückgegeben.Beispiele
Alle Spalten einer bestimmten Tabelle auflisten
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
// Alle Spalten der Tabelle 'kunden' im Schema 'dbo' abrufen
$result = odbc_columns($conn, null, 'dbo', 'kunden', '%');
if ($result === false) {
die('Fehler beim Abrufen der Spalteninformationen');
}
while (odbc_fetch_row($result)) {
$spaltenname = odbc_result($result, 'COLUMN_NAME');
$datentyp = odbc_result($result, 'TYPE_NAME');
$groesse = odbc_result($result, 'COLUMN_SIZE');
$nullable = odbc_result($result, 'NULLABLE') ? 'ja' : 'nein';
echo "Spalte: {$spaltenname}, Typ: {$datentyp}({$groesse}), Nullable: {$nullable}\n";
}
odbc_free_result($result);
odbc_close($conn);
?>
Schema-Exploration: Alle Spalten aller Tabellen ermitteln
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
// Alle Spalten aller Tabellen (Wildcards für Tabelle und Spalte)
$result = odbc_columns($conn, null, null, '%', '%');
$schema = [];
while (odbc_fetch_row($result)) {
$tabelle = odbc_result($result, 'TABLE_NAME');
$spalte = odbc_result($result, 'COLUMN_NAME');
$typ = odbc_result($result, 'TYPE_NAME');
$schema[$tabelle][] = [
'spalte' => $spalte,
'typ' => $typ,
];
}
odbc_free_result($result);
odbc_close($conn);
foreach ($schema as $tabelle => $spalten) {
echo "Tabelle: {$tabelle}\n";
foreach ($spalten as $info) {
echo " - {$info['spalte']} ({$info['typ']})\n";
}
}
?>
// Wichtig · Fallstricke
Treiberabhängigkeit: Das Verhalten von odbc_columns() hängt stark vom eingesetzten ODBC-Treiber ab. Nicht alle Treiber unterstützen Wildcards in allen Parametern oder liefern alle definierten Spalten der Ergebnismenge.
Ressourcen freigeben: Das Ergebnis sollte nach der Verarbeitung mit odbc_free_result() freigegeben werden, um Speicher zu sparen, insbesondere bei großen Schemata.
Groß-/Kleinschreibung: Bei manchen Datenbanksystemen ist die Groß-/Kleinschreibung von Schema-, Tabellen- und Spaltennamen relevant. Im Zweifelsfall sollte die exakte Schreibweise der Datenbank verwendet oder mit % gearbeitet werden.