以下代码应该计算数据库中的表数。它只计算最新的表格。正如我尝试按名称列出表格一样,只列出最新的表格。所有表格仅用于测试,没有任何不同的属性。
function checkdbempty(){
global $fsdbh;
$results = $fsdbh->query("show tables");
foreach($results as $result); { $int += 1; }
return $int;
}
这将返回1个结果。
function checkdbempty(){
global $fsdbh;
$check = $fsdbh->query('show tables')->fetch(PDO::FETCH_ASSOC);
foreach($check as $ch){ echo $ch; }
}
这将告诉我第一个表的名称:
function checkdbempty(){
global $fsdbh;
$check = $fsdbh->query('show tables')->fetch(PDO::FETCH_ASSOC); $result = '';
foreach($check as $ch){ $result.= $ch; }
return $result;
}
它只会计算->fetch(PDO::FETCH_NUM);
问题是什么
答案 0 :(得分:1)
foreach($results as $result); { $int += 1; }
foreach
以分号结束,后面的代码只执行一次。
$check = $fsdbh->query('show tables')->fetch(PDO::FETCH_ASSOC);
$check
是从语句中获取的单行,如果要遍历每一行使用fetchAll
方法
答案 1 :(得分:1)
fetch()
只会获取一行,并且不会在方法链中使用太多。您想改为fetchAll()
。当您使用PDO::FETCH_NUM
时,您将使用数字索引而不是关联数组中的列名来获取列 - 您不检索查询返回的行数
$check = $fsdbh->query('show tables')->fetchAll(PDO::FETCH_ASSOC);
var_dump($check);
以这种方式链接方法是不明智的,即使已知show tables
在语法上是正确的并且不应该在RDBMS中失败。而是检查FALSE
返回然后获取:
$result = $fsdbh->query('show tables');
if ($result) {
$check = $result->fetchAll(PDO::FETCH_ASSOC);
}
对单行使用fetch()
假设您将在while
循环内部进行提取:
$rows = array();
$results = $fsdbj->query('show tables');
if ($results){
while ($row = $results->fetch(PDO::FETCH_ASSOC)) {
$rows[] = $row;
}
}
答案 2 :(得分:0)
试试这个:
$sth = $fsdbh->prepare('show tables');
$sth->execute();
return $sth->rowCount();