2009-09-20 5 views

Antwort

19

Was ist eine SQL-Abfrage verwenden, die so etwas wie dies funktioniert:

show tables 

Oder, falls erforderlich, unter Angabe der Datenbank:

show tables from crawler 

Und, wenn Sie nur ein paar Tische zu bekommen:

show tables from crawler like 'site%' 


Eigentlich, auch wenn die 0.123.function exists, es gibt die Seite manual page:

Diese Funktion ist veraltet. Es ist vorzuziehen zu verwenden mysql_query() zu geben Sie eine SQL SHOW TABLES [FROM db_name] [LIKE 'pattern'] Anweisung statt.

Also, das sollte ziemlich gut mit PDO sein, schätze ich.


Und mit PDO Prüfung:

$db = new PDO('mysql:dbname=crawler;host=127.0.0.1', 'crawler', 'crawler'); 
$result = $db->query("show tables"); 
while ($row = $result->fetch(PDO::FETCH_NUM)) { 
    var_dump($row[0]); 
} 

ich diese Art der Ausgabe bekommen: Ich habe tatsächlich in dieser Datenbank

string 'headers' (length=7) 
string 'headers_sites' (length=13) 
string 'headers_sites_0' (length=15) 
... 
string 'headers_sites_7' (length=15) 
string 'reporting_sites_servers_software' (length=32) 
string 'servers' (length=7) 
string 'sites' (length=5) 
string 'sites_0' (length=7) 
... 
string 'sites_servers' (length=13) 
string 'sites_software' (length=14) 
string 'software' (length=8) 

, die mit den Tabellen passen.

+0

Ja. Dies funktioniert, solange die Abfragesyntax "Tabellen anzeigen" für alle von PDO unterstützten Datenbanktreiber gültig ist. Ist das der Fall? – saintsjd

+0

Zum Beispiel verwendet Postgres "\ dt" zum Auflisten von Tabellen und nicht "Show Tables". Wenn unser Ziel die datenbankübergreifende Kompatibilität ist (mit PDO), dann wird dieser Weg nicht funktionieren. – saintsjd

+0

@saintsjd: wahrscheinlich nicht, leider :-(;; durch die Quellen des Doctrine ORM-Frameworks, die Abfrage zum Auflisten der Tabellen einer DB ist etwas komplizierter für MsSQL, komplizierter für SQLite und noch mehr Kompliziert für PgSQL :-( –

2

Wenn Sie einen tragbaren Weg wollen für das Schema abzufragen, können Sie die ansi verwenden Standard INFORMATION_SCHEMA

0
$alltables=$db->query("SHOW TABLES",PDO::FETCH_NUM); 

while($result=$alltables->fetch()){ 

echo $result[0].'<br/>'; 
} 

Das ist der genaue Code, den Sie wollen, denke ich.