2 回答
TA贡献1784条经验 获得超9个赞
在你的循环中...
while($rows) {
因为您不会更改循环中的值 - 它始终是它开始的值,因此永远不会终止,认为您想使用...
$result2 = mysqli_query($db, $sql2);
while($rows = mysqli_fetch_assoc($result2)) {
这将依次获取每一行并在移动到下一行之前显示输出。
您可能还想将表定义移到循环之外,除非您希望每一行都在它自己的表中。
TA贡献1877条经验 获得超6个赞
Nigel 确实提供了解决方案,但让我们讨论其他明显的问题。我已经重新编写了您的代码,进行了两个主要更改,您可能仍然需要进行一些调整,因为我不熟悉您的 db 或其他命名变量。
1 - 准备好的声明
它如何帮助以及有什么作用与其一百次重新回答这个问题,其他人在解释它方面做得更好:
准备好的语句如何防止 SQL 注入攻击?
辅助函数- 在您更好地了解准备好的语句的工作原理后,您将需要此功能。
https://phpdelusions.net/mysqli/simple
2 - 面向对象
我用面向对象的语法重写了这个。我发现它不那么冗长,而且通常更容易理解。你用语法改变你赢得了什么做准备好的语句,因为它们通常涉及更多的步骤(但为了更大的好处)
$sql2 = "SELECT a_id, u_id, answer, a_datetime, user_id, username FROM answer LEFT JOIN user ON answer.u_id = user.user_id WHERE q_id = ?";
$stmt -> $con -> prepare($sql2);
$stmt -> bind_param("s", $pid);
$stmt -> execute();
$stmt -> store_result();
$stmt -> bind_result($aid, $uid, $answer, $date, $userid, $username);
echo '<table border=2>';
while($stmt -> fetch()) {
echo '<tr>';
echo '<td>Answered by: '. $username .'</td>';
echo '</tr>';
echo '<tr>';
echo '<td>'. $answer .'</td>';
echo '</tr>';
echo '<tr>';
echo '<td>'. $date .'</td>';
echo '</tr>';
}
echo '</table>';
$stmt -> free_result();
$stmt -> close();
$con -> close();
在我们挑选头发时,您应该尽量不要回显过多的 HTML。您可以在while循环内关闭 php ,它的工作方式相同。我还修复了您遇到的一些 HTML 问题。(应该使用<tbody>,只是为了好玩,我<thead>也在那里扔了一个
// after bind result in the code above
?>
<table>
<thead>
<th>Answered by</th>
<th>Answer</th>
<th>Date</th>
</thead>
<tbody>
<?php
while($stmt -> fetch()) {
?>
<tr>
<td><?php echo $username;?></td>
</tr>
<tr>
<td><?php echo $answer;?></td>
</tr>
<tr>
<td><?php echo $date;?></td>
</tr>
<?php
}
?>
</tbody>
</table>
- 2 回答
- 0 关注
- 133 浏览
添加回答
举报