1

データベースから SELECT し、結果を確認してから while ループで行を出力する方法を探しています (結果がゼロより大きい場合)

別のカウントクエリの使用を本当に避けたい

現在、私はこれを使用しています:

$sql = 'SELECT id, username, usercity, usercountry FROM siteusers WHERE userage > 50';
$STH = $conn->query($sql);
$arr = $STH->fetchAll();

if (count($arr) > 0) {

    echo '<div id="users">';

    foreach ($arr as $row) {

       echo '<h1>'.$row['username'].</h1>';

    }

    echo '</div>';

}

できます。しかし、fetchAll とカスタム for-each ループを使用せずに、結果/numrows をチェックして行をループする方法はありませんか?

それとも全く関係ないですか?(for-each は while ループと同じくらい良いですか?)

このようにすると、最初の行は while ループに含まれません。

$sql = 'SELECT id, username, usercity, usercountry FROM siteusers WHERE userage > 50';
$STH = $conn->query($sql);

if ($row = $STH->fetch()) {

    echo '<div id="users">';

    while ($row = $STH->fetch()) {

       echo '<h1>'.$row['username'].</h1>';

    }

    echo '</div>';

}

編集:動的レイアウトの目的で、結果を確認する必要があります

4

2 に答える 2

1

PDO メソッド rowCount を使用して、行があるかどうかを foreach の前に確認できます

$STH = $conn->query($sql);
if ($STH->rowCount())
 {echo '<div id="users">';
  foreach ($STH->fetchAll() as $row)
   {
    echo '<h1>'.$row['username'].'</h1>';
    }
  echo '</div>';
  }

http://php.net/manual/en/pdostatement.rowcount.php

すべての結果が fetchAll() を使用して一度にメモリにロードされるため、これは大量のメモリを使用することに注意してください。非常に大きな結果セットがある場合は、foreach の代わりに while を使用することを検討してください

while ($row = $STH->fetch())
 {// foo with $row
  }
于 2014-07-14T15:46:00.870 に答える
0

$rowif ステートメント内の結果の最初の行に設定されています。これは、while ループが 2 行目から開始されることを意味します。

$sql = 'SELECT id, username, usercity, usercountry FROM siteusers WHERE userage > 50';
$STH = $conn->query($sql);

    echo '<div id="users">';

    while ($row = $STH->fetch()) {
       echo '<h1>'.$row['username'].</h1>';
    }

    echo '</div>';

while ループは、取得する結果がある場合に実行され、ない場合はそれぞれ実行されません。

于 2014-07-14T14:58:34.080 に答える