我正在寻找一种从数据库中选择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 需要检查结果,以便进行动态布局
答案 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循环,如果没有,则分别不会运行。