2

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

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

问题是什么

4

3 回答 3

1
foreach($results as $result); { $int += 1; }

foreach以分号结束,之后的代码只执行一次。

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

$check是从语句中获取的单行,如果要遍历每一行使用fetchAll方法

于 2012-08-14T18:55:42.377 回答
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;
  }
}
于 2012-08-14T18:56:00.773 回答
0

尝试这个:

$sth = $fsdbh->prepare('show tables');
$sth->execute();
return $sth->rowCount();
于 2012-08-14T19:00:58.307 回答