Start · Sprachen · PHP · Referenz · odbc_columns

odbc_columns

Funktion

Gibt eine Ergebnismenge mit Informationen über die Spalten einer oder mehrerer Tabellen einer ODBC-Datenquelle zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_columns(resource $odbc, string $catalog = null, string $schema = null, string $table = null, string $column = null): resource|false

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

Typ
resource|false
Beschreibung
Bei Erfolg eine ODBC-Ergebnisressource, die mit 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);
?>
Spalte: kunden_id, Typ: INTEGER(10), Nullable: nein Spalte: vorname, Typ: VARCHAR(100), Nullable: ja Spalte: nachname, Typ: VARCHAR(100), Nullable: nein Spalte: email, Typ: VARCHAR(255), Nullable: ja

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";
    }
}
?>
Tabelle: kunden - kunden_id (INTEGER) - vorname (VARCHAR) Tabelle: bestellungen - bestell_id (INTEGER) - kunden_id (INTEGER)

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