PHP PDO show tables函数只显示最新的表,而不是所有的表

PHP PDO show tables函数只显示最新的表,而不是所有的表,php,count,pdo,mysql,Php,Count,Pdo,Mysql,下面的代码用于计算数据库中的表数。它只计算最新的表。正如我尝试按名称列出表一样,只列出最新的表。所有表都只是用于测试,没有任何不同的属性 function checkdbempty(){ global $fsdbh; $results = $fsdbh->query("show tables"); foreach($results as $result); { $int += 1; } return $int; } 这将返回1个结果 function ch

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

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)的一个

有什么问题

foreach($results as $result); { $int += 1; }
foreach
以分号结尾,代码在执行后只执行一次

 $check = $fsdbh->query('show tables')->fetch(PDO::FETCH_ASSOC);
$check
是从语句中获取的单行,如果您想遍历每一行,请使用
fetchAll
方法

fetch()
将只获取一行,并且不会在方法链接中使用太多。你想这样做。当您使用
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()

$rows = array();
$results = $fsdbj->query('show tables');
if ($results){
  while ($row = $results->fetch(PDO::FETCH_ASSOC)) {
    $rows[] = $row;
  }
}
试试这个:

$sth = $fsdbh->prepare('show tables');
$sth->execute();
return $sth->rowCount();