是否有可能在while循环之外回显多个结果?

时间:2010-11-08 05:01:15

标签: php

我有一个while循环,用于回显多个转换为离线用户的mysql结果。为了使事情更有条理,我想执行查询,将结果存储在变量中,然后在页面底部回显它。我需要回应某个父div中的在线和离线用户,所以我回到第一个div标签,然后执行两个查询并回显结果,然后回显结束标记,这似乎很混乱。目前,如果我尝试从while循环外部回显结果,我只得到1个结果。如果有人有任何想法,我将不胜感激。

 $sql = 'SELECT * FROM users
LEFT JOIN friendships
ON friendships.friend_id = users.id
WHERE friendships.user_id = ?
AND users.id NOT IN (
  SELECT active_users.id FROM active_users)';
$stmt5 = $conn->prepare($sql);
$result=$stmt5->execute(array($userid));

    while ($row = $stmt5->fetch(PDO::FETCH_ASSOC)) {
    $online=htmlspecialchars( $row['username'], ENT_NOQUOTES, 'UTF-8' );

$online = "<div class='user-online'>
    <a data-name=\"$to\">$to</a>
</div>";
$online.=etc...plus do other processes
}

    <div id=\"online\">
        ".$online."
    </div>

3 个答案:

答案 0 :(得分:2)

您需要将SQL结果存储在数组中

$sql = 'SELECT * FROM users
LEFT JOIN friendships
ON friendships.friend_id = users.id
WHERE friendships.user_id = ?
AND users.id NOT IN (
  SELECT active_users.id FROM active_users)';
$stmt5 = $conn->prepare($sql);
$result=$stmt5->execute(array($userid));

    while ($row = $stmt5->fetch(PDO::FETCH_ASSOC)) {
    $online[]=htmlspecialchars( $row['username'], ENT_NOQUOTES, 'UTF-8' );

}

    <div id=\"online\">
        <?php foreach ($online as $aline) {
echo $aline;
} ?>
    </div>

为了清晰起见,我修剪了一些代码,但希望它有所帮助

答案 1 :(得分:1)

while循环的每次迭代都重新定义了$ online变量(覆盖它的先前值)。您可以在循环外部定义一个变量,并在循环中追加它,或者将结果存储在数组中,然后遍历它以生成输出。

答案 2 :(得分:1)

您不需要while循环。只要你有足够的内存:

$rows = $stmt5->fetchAll(PDO::FETCH_ASSOC);