我正在寻找一种从数据库中选择的方法,然后检查结果,然后在 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 循环的情况下检查 result/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>';
}
编辑:出于动态布局目的,我确实需要检查结果
最佳答案
如果有行,你可以使用 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
}
关于php - 在输出 while 循环之前检查结果/计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24739489/