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

标签 php mysql pdo fetch fetchall

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

相关文章:

php - 从两个表中选择最新条目?

php - MySQL+PDO : Advance cursor *without* fetching data?

PHP MYSQL - 根据特定类别添加项目

mysql - 导入EC2时出现SQL错误键列不存在

php - 如何在 PHP 中用 for 循环遍历以 0 开头的数字?

mysql - 如何在 Yii 中使用 MySQL DB 进行 EGmap 扩展

mysql - SQL 中的存储过程用于连接两个表

php - 在SQLite PDO中设置文件模式

php - 正则表达式 PHP,将所有链接与特定文本匹配

php - MySQL 查询将字段设置为 0 而不是空白字符串