Quando si utilizza PHP PDO per accedere al database, esiste un modo per elencare tutte le tabelle in un database?Equivalente a mysql_list_tables in PHP DOP?
Qualcosa come mysql_list_tables() è ciò che è necessario.
Quando si utilizza PHP PDO per accedere al database, esiste un modo per elencare tutte le tabelle in un database?Equivalente a mysql_list_tables in PHP DOP?
Qualcosa come mysql_list_tables() è ciò che è necessario.
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 dichiarazioneSQL 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.
Se si vuole fare questo in modo cross-platform, guardare in Zend Framework s' Zend_Db
, che fornisce il listTables()
metodo
Se si desidera un modo portabile per interrogare per lo schema, è possibile utilizzare il ansi standard
$alltables=$db->query("SHOW TABLES",PDO::FETCH_NUM);
while($result=$alltables->fetch()){
echo $result[0].'<br/>';
}
Questo è il codice esatto che si desidera, credo.
Sì. Ciò funzionerà finché la sintassi della query "mostra tabelle" è valida per tutti i driver del database supportati da PDO. È questo il caso? – saintsjd
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
@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 :-( –