PHP PDO显示表功能仅显示最新表并非全部

时间:2012-08-14 18:47:53

标签: php count pdo mysql

以下代码应该计算数据库中的表数。它只计算最新的表格。正如我尝试按名称列出表格一样,只列出最新的表格。所有表格仅用于测试,没有任何不同的属性。

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);

的一个

问题是什么

3 个答案:

答案 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();