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

そしてそれは1つだけを数えます->fetch(PDO::FETCH_NUM);

何が問題ですか

4

3 に答える 3

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

foreachセミコロンで終了します。これは、1回だけ実行された後のコードです。

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

$checkすべての行をトラバースする場合は、ステートメントからフェッチされた単一行です。fetchAllメソッドを使用します

于 2012-08-14T18:55:42.377 に答える
1

fetch()1行のみをフェッチし、メソッドチェーンではあまり使用されません。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 に答える