【发布时间】:2009-09-20 18:52:51
【问题描述】:
使用PHP PDO访问数据库时,有没有办法列出数据库中的所有表?
需要 mysql_list_tables() 之类的东西。
【问题讨论】:
使用PHP PDO访问数据库时,有没有办法列出数据库中的所有表?
需要 mysql_list_tables() 之类的东西。
【问题讨论】:
如果使用 SQL 查询来做这样的事情:
show tables
或者,如果需要,指定数据库:
show tables from crawler
而且,如果您只想获取一些表格:
show tables from crawler like 'site%'
实际上,即使 mysql_list_tables() 函数存在,它的手册页也指出:
此功能已弃用。这是 最好使用
mysql_query()发出SQL SHOW TABLES [FROM db_name] [LIKE 'pattern']声明 而是。
所以,我猜 PDO 应该没问题。
并且,使用 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]);
}
我得到了这样的输出:
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)
这与我在这个数据库中实际拥有的表相符。
【讨论】:
如果您想要一种可移植的方式来查询架构,可以使用 ansi 标准 INFORMATION_SCHEMA
【讨论】:
$alltables=$db->query("SHOW TABLES",PDO::FETCH_NUM);
while($result=$alltables->fetch()){
echo $result[0].'<br/>';
}
我猜这正是你想要的代码。
【讨论】:
如果您想以跨平台的方式执行此操作,请查看Zend Framework 的Zend_Db,它提供了listTables() 方法
【讨论】: