Start · Sprachen · PHP · Referenz · odbc_tables

odbc_tables

Funktion

Ruft die Liste der Tabellennamen (und weiterer Objekte) einer ODBC-Datenquelle ab und gibt das Ergebnis als ODBC-Ergebnis-Ressource zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_tables(resource $odbc, ?string $catalog = null, ?string $schema = null, ?string $table = null, ?string $table_type = null): resource|false

Beschreibung

odbc_tables() fragt über die ODBC-Schnittstelle die im Treiber hinterlegten Tabelleninformationen einer Datenquelle ab. Die Funktion gibt eine Ergebnis-Ressource zurück, die mit den üblichen ODBC-Lesefunktionen wie odbc_fetch_row() oder odbc_result() ausgelesen werden kann. Typische Anwendungsfälle sind das Auflisten aller Tabellen einer Datenbank oder das Prüfen, ob eine bestimmte Tabelle existiert.

Die zurückgegebene Ergebnis-Ressource enthält die Spalten TABLE_CAT, TABLE_SCHEM, TABLE_NAME, TABLE_TYPE und REMARKS. Mit dem Parameter table_type lässt sich die Abfrage auf bestimmte Objekttypen wie 'TABLE', 'VIEW', 'SYSTEM TABLE' oder 'ALIAS' einschränken.

Die Filterparameter catalog, schema und table unterstützen das Platzhalterzeichen % für SQL-ähnliche Mustersuchen. Wird null übergeben, wird der Parameter bei der Filterung ignoriert. Dies ist besonders nützlich, wenn nur nach einem bestimmten Schema oder Tabellennamen gesucht werden soll, ohne die anderen Parameter einschränken zu müssen.

Die Funktion ist abhängig vom installierten ODBC-Treiber und der jeweiligen Datenquelle; manche Treiber unterstützen nicht alle Parameter vollständig. Bei Datenbankprojekten mit ODBC-Anbindung (z. B. MS SQL Server, IBM DB2 oder Access) ist odbc_tables() das Standardwerkzeug zur Metadaten-Ermittlung.

Parameter

Name Typ Default Beschreibung
$odbc Pflicht resource Eine aktive ODBC-Verbindungsressource, die mit odbc_connect() oder odbc_pconnect() erzeugt wurde.
$catalog ?string null Name des Katalogs (Datenbankname), nach dem gefiltert wird. null bedeutet keine Einschränkung. Platzhalter % ist erlaubt.
$schema ?string null Name des Schemas, nach dem gefiltert wird. null bedeutet keine Einschränkung. Platzhalter % ist erlaubt.
$table ?string null Name der Tabelle, nach dem gefiltert wird. null bedeutet keine Einschränkung. Platzhalter % ist erlaubt.
$table_type ?string null Kommagetrennte Liste von Objekttypen, z. B. 'TABLE,VIEW'. Mögliche Werte sind 'TABLE', 'VIEW', 'SYSTEM TABLE', 'GLOBAL TEMPORARY', 'LOCAL TEMPORARY', 'ALIAS' und 'SYNONYM'. null schränkt nicht ein.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine ODBC-Ergebnis-Ressource zurück, die mit odbc_fetch_row(), odbc_result() o. ä. ausgelesen werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Alle Tabellen einer ODBC-Datenquelle auflisten

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');

if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}

// Alle Tabellen (kein Filter) abrufen
$result = odbc_tables($conn, null, null, null, 'TABLE');

if ($result === false) {
    die('Fehler beim Abrufen der Tabellen: ' . odbc_errormsg($conn));
}

echo "Gefundene Tabellen:\n";
while (odbc_fetch_row($result)) {
    $catalog   = odbc_result($result, 'TABLE_CAT');
    $schema    = odbc_result($result, 'TABLE_SCHEM');
    $tableName = odbc_result($result, 'TABLE_NAME');
    $type      = odbc_result($result, 'TABLE_TYPE');
    echo "  [{$catalog}].[{$schema}].[{$tableName}] ({$type})\n";
}

odbc_free_result($result);
odbc_close($conn);
Gefundene Tabellen: [MeineDB].[dbo].[kunden] (TABLE) [MeineDB].[dbo].[bestellungen] (TABLE) [MeineDB].[dbo].[produkte] (TABLE)

Prüfen, ob eine bestimmte Tabelle existiert

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');

function tableExists(resource $conn, string $tableName): bool {
    $result = odbc_tables($conn, null, null, $tableName, 'TABLE');
    if ($result === false) {
        return false;
    }
    $exists = odbc_fetch_row($result);
    odbc_free_result($result);
    return (bool) $exists;
}

$tabellenName = 'kunden';
if (tableExists($conn, $tabellenName)) {
    echo "Tabelle '{$tabellenName}' existiert.\n";
} else {
    echo "Tabelle '{$tabellenName}' wurde nicht gefunden.\n";
}

odbc_close($conn);
Tabelle 'kunden' existiert.

// Wichtig · Fallstricke

Treiber-Kompatibilität: Das Verhalten und die Vollständigkeit der zurückgegebenen Metadaten hängen stark vom eingesetzten ODBC-Treiber ab. Nicht alle Treiber unterstützen alle Filterparameter oder liefern Werte für alle Ergebnisspalten.

Ressourcen freigeben: Die zurückgegebene Ergebnis-Ressource sollte nach der Verwendung mit odbc_free_result() freigegeben werden, um Speicherlecks zu vermeiden – besonders in lang laufenden Skripten.

Platzhalter: Das Prozentzeichen % wirkt als SQL-Wildcard. Soll buchstäblich nach einem Tabellennamen mit % gesucht werden, muss der Treiber entsprechende Escape-Mechanismen unterstützen, was nicht immer der Fall ist.