Signatur
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
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);
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);
// 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.