2009-09-20 11 views

Odpowiedz

19

Co za pomocą zapytania SQL, który robi coś takiego:

show tables 

Lub, jeśli to konieczne, określając bazie danych:

show tables from crawler 

, a jeśli chcesz tylko trochę tabele:

show tables from crawler like 'site%' 


Faktycznie, nawet jeśli mysql_list_tables() Istnieje funkcja ręcznego wyświetlania stron:

Ta funkcja jest nieaktualna. Jest zaleca się stosowanie mysql_query() do wydać SQL SHOW TABLES [FROM db_name] [LIKE 'pattern'] oświadczenie zamiast.

To powinno być całkiem OK z PDO, zgaduję.


I testowanie z PDO:

$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]); 
} 

Dostaję ten rodzaj wyjścia:

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) 

który pasuje z tabelami I rzeczywiście mają w tym banku danych.

+0

Tak. Będzie działać tak długo, jak składnia zapytań "tabele wyświetlające" jest poprawna dla wszystkich obsługiwanych sterowników PDO. Czy tak jest w tym przypadku? – saintsjd

+0

Na przykład Postgres używa "\ dt" do wyświetlania tabel, a nie "Show Tables". Więc jeśli naszym celem jest kompatybilność z wieloma bazami danych (przy użyciu PDO), to ten sposób nie zadziała. – saintsjd

+0

@saintsjd: prawdopodobnie nie, niestety :-(;; przechodząc przez źródła struktury ORM Doctrine, zapytanie użyte do wyświetlenia tabel DB jest nieco bardziej skomplikowane dla MsSQL, bardziej skomplikowane dla SQLite, i jeszcze więcej skomplikowane dla PgSQL :-( –

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

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

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

To jest dokładny kod, który chcesz, jak sądzę.