Podczas korzystania z PHP PDO w celu uzyskania dostępu do bazy danych, czy istnieje sposób na wyświetlenie wszystkich tabel w bazie danych?Odpowiednik tabeli mysql_list_tables w PHP PDO?
Coś mysql_list_tables() to co jest potrzebne.
Podczas korzystania z PHP PDO w celu uzyskania dostępu do bazy danych, czy istnieje sposób na wyświetlenie wszystkich tabel w bazie danych?Odpowiednik tabeli mysql_list_tables w PHP PDO?
Coś mysql_list_tables() to co jest potrzebne.
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.
Jeśli chcesz to zrobić w taki sposób, cross-platform, zajrzeć do Zend Framework „s Zend_Db
, który oferuje listTables()
metoda
Jeśli chcesz przenośny sposób do kwerendy dla schematu, można użyć ANSI standardowy INFORMATION_SCHEMA
$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ę.
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
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
@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 :-( –