以下函数用于提取数据库中的表。PDO在数据库中计数表
$check = $fsdbh->query('show tables')->fetch();
它不能被计数,因为它有一个额外的层,数据库名称。
的print_r():
Array ([Tables_in_dbtest] => test [0] => test)
所以我们需要让一步到阵列中,只是计算的数据库数量。我们将如何做到这一点。
以下函数用于提取数据库中的表。PDO在数据库中计数表
$check = $fsdbh->query('show tables')->fetch();
它不能被计数,因为它有一个额外的层,数据库名称。
的print_r():
Array ([Tables_in_dbtest] => test [0] => test)
所以我们需要让一步到阵列中,只是计算的数据库数量。我们将如何做到这一点。
默认获取样式是PDO::FETCH_BOTH
,您需要的是PDO::FETCH_ASSOC
或PDO::FETCH_NUM
。
请参阅the fetch
documentation了解更多信息。
此代码应为你工作:
$check = $fsdbh->query('show tables')->fetch(PDO::FETCH_NUM);
你可以做的另一件事是你连接到数据库后更改默认提取风格PDO::setAttribute到PDO::FETCH_ASSOC
。
$dbh = new PDO('...');
$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
FETCH_NUM或FETCH_ASSOC都可以工作,因为它会阻止您在结果中获得关联和数字索引键(从而使数组中的值数加倍)。 – 2012-08-14 17:50:20
mmm。工程,但似乎有另一个问题。 'show tables'只能得到一个表,在这个数据库的服务器上有2个 – 2012-08-14 17:54:24
@RobinKnight,让你的db用户有权访问或读取这两个表? – Marwelln 2012-08-14 17:55:12
的正确方法是做做
SELECT count(*)
FROM INFORMATION_SCHEMA
WHERE TABLE_SCHEMA='yourdbname';
这不是PDO。你可以把它变成一个PDO查询 – 2012-08-14 18:07:39
查询是一个查询。 PDO只是PHP与数据库接口的一种方法。无论您使用哪种接口,它都是隐藏的SQL。 – 2012-08-14 18:25:11
脸掌...嗯。 – 2012-08-14 22:53:37
的问题不是一个嵌套/多维数组按照你的建议。这是你在结果数组中获得关联键和数字键的事实。请参阅下面的Marwelln的答案,以获得解决您的结果数组问题的良好解决方案。 – 2012-08-14 17:51:28
他的方法只产生1个表格,因为我没有评论它们全部。 – 2012-08-14 18:36:02
这可能是因为当前所选数据库中只有一个表? – 2012-08-14 19:02:12