2012-08-14 61 views
0

以下函数用于提取数据库中的表。PDO在数据库中计数表

$check = $fsdbh->query('show tables')->fetch(); 

它不能被计数,因为它有一个额外的层,数据库名称。

的print_r():

Array ([Tables_in_dbtest] => test [0] => test) 

所以我们需要让一步到阵列中,只是计算的数据库数量。我们将如何做到这一点。

+0

的问题不是一个嵌套/多维数组按照你的建议。这是你在结果数组中获得关联键和数字键的事实。请参阅下面的Marwelln的答案,以获得解决您的结果数组问题的良好解决方案。 – 2012-08-14 17:51:28

+0

他的方法只产生1个表格,因为我没有评论它们全部。 – 2012-08-14 18:36:02

+0

这可能是因为当前所选数据库中只有一个表? – 2012-08-14 19:02:12

回答

3

默认获取样式是PDO::FETCH_BOTH,您需要的是PDO::FETCH_ASSOCPDO::FETCH_NUM

请参阅the fetch documentation了解更多信息。

此代码应为你工作:

$check = $fsdbh->query('show tables')->fetch(PDO::FETCH_NUM); 

你可以做的另一件事是你连接到数据库后更改默认提取风格PDO::setAttributePDO::FETCH_ASSOC

$dbh = new PDO('...'); 
$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
+0

FETCH_NUM或FETCH_ASSOC都可以工作,因为它会阻止您在结果中获得关联和数字索引键(从而使数组中的值数加倍)。 – 2012-08-14 17:50:20

+0

mmm。工程,但似乎有另一个问题。 'show tables'只能得到一个表,在这个数据库的服务器上有2个 – 2012-08-14 17:54:24

+0

@RobinKnight,让你的db用户有权访问或读取这两个表? – Marwelln 2012-08-14 17:55:12

1

的正确方法是做做

SELECT count(*) 
FROM INFORMATION_SCHEMA 
WHERE TABLE_SCHEMA='yourdbname'; 
+0

这不是PDO。你可以把它变成一个PDO查询 – 2012-08-14 18:07:39

+3

查询是一个查询。 PDO只是PHP与数据库接口的一种方法。无论您使用哪种接口,它都是隐藏的SQL。 – 2012-08-14 18:25:11

+0

脸掌...嗯。 – 2012-08-14 22:53:37