相当于PHP PDO中的mysql_list_tables?

时间:2009-09-20 18:52:51

标签: php pdo

使用PHP PDO访问数据库时,有没有办法列出数据库中的所有表?

需要像mysql_list_tables()这样的东西。

4 个答案:

答案 0 :(得分:19)

如何使用执行以下操作的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)

哪个适合我在这个数据库中实际拥有的表。

答案 1 :(得分:2)

如果您想要一种可移植的方式来查询架构,可以使用ansi标准INFORMATION_SCHEMA

答案 2 :(得分:1)

如果您想以跨平台的方式执行此操作,请查看Zend FrameworkZend_Db,其中提供了listTables()方法

答案 3 :(得分:0)

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

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

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

我想这是您想要的确切代码。