1

我正在寻找一种从数据库中选择的方法,然后检查结果,然后在 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 循环?

还是根本不重要?(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() 一次性加载到内存中。如果您有非常大的结果集,请考虑使用 while 而不是 foreach

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

$row被设置为 if 语句中结果的第一行。这意味着您的 while 循环将从第二行开始。

$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 回答