2009-09-20 20 views

risposta

19

Che dire utilizzando una query SQL che fa qualcosa di simile:

show tables 

Oppure, se necessario, specificando il database:

show tables from crawler 

E, se si desidera solo per ottenere alcune tabelle:

show tables from crawler like 'site%' 


In realtà, anche se il 0.123.esiste, la sua pagina di manuale afferma:

Questa funzione è obsoleta. È preferibile per utilizzare mysql_query() a emettere una dichiarazione SQL SHOW TABLES [FROM db_name] [LIKE 'pattern'] invece.

Quindi, questo dovrebbe essere abbastanza OK con PDO, sto indovinando.


E, il test con DOP:

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

sto ottenendo questo tipo di output:

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) 

che si adatta con i tavoli Io in realtà sono in questo database.

+0

Sì. Ciò funzionerà finché la sintassi della query "mostra tabelle" è valida per tutti i driver del database supportati da PDO. È questo il caso? – saintsjd

+0

Ad esempio, Postgres utilizza "\ dt" per elencare le tabelle e non "Mostra tabelle". Quindi, se il nostro obiettivo è la compatibilità tra database (utilizzando PDO), in questo modo non funzionerà. – saintsjd

+0

@saintsjd: probabilmente no, sfortunatamente :-(; passando attraverso le fonti del framework ORM di Doctrine, la query utilizzata per elencare le tabelle di un DB è un po 'più complicata per MsSQL, ancora più complicata per SQLite e ancora di più complicato per PgSQL :-( –

2

Se si desidera un modo portabile per interrogare per lo schema, è possibile utilizzare il ansi standard

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

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

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

Questo è il codice esatto che si desidera, credo.