在输出while循环之前检查结果/计数

时间:2014-07-14 14:56:40

标签: php mysql pdo fetch fetchall

我正在寻找一种从数据库中选择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循环?

或者根本没关系? (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>';

}

编辑:我 DO 需要检查结果,以便进行动态布局

2 个答案:

答案 0 :(得分: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
  }

答案 1 :(得分: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循环,如果没有,则分别不会运行。