我有一个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>
答案 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);