这段代码冻结了我的电脑

这部分代码应该输出提供给该问题的所有答案的数据。


这段代码在运行时会冻结。我试过在没有成功的情况下改变功能。


$sql2 = "SELECT answer.a_id, answer.u_id, answer.answer, answer.a_datetime, user.user_id, user.username FROM answer LEFT JOIN user ON answer.u_id = user.user_id WHERE q_id='$pid'";

$result2 = mysqli_query($db, $sql2);

$rows = mysqli_fetch_assoc($result2);

while($rows) {

        echo '<table border=2>';

        echo '<tr>';

                echo '<td>Answered by: '.$rows['username'].'</td>';

                echo '</tr>';

            echo '<tr>';

                echo '<td>'.$rows['answer'].'</td>';

            echo '</tr>';

            echo '<tr>';

                echo '<td>'.$rows['a_datetime'].'</td>';

            echo '</tr>';

        echo '</table>';

    }


森栏
浏览 134回答 2
2回答

千万里不及你

在你的循环中...while($rows) {因为您不会更改循环中的值 - 它始终是它开始的值,因此永远不会终止,认为您想使用...$result2 = mysqli_query($db, $sql2);while($rows = mysqli_fetch_assoc($result2)) {这将依次获取每一行并在移动到下一行之前显示输出。您可能还想将表定义移到循环之外,除非您希望每一行都在它自己的表中。

慕哥9229398

Nigel 确实提供了解决方案,但让我们讨论其他明显的问题。我已经重新编写了您的代码,进行了两个主要更改,您可能仍然需要进行一些调整,因为我不熟悉您的 db 或其他命名变量。1 - 准备好的声明它如何帮助以及有什么作用与其一百次重新回答这个问题,其他人在解释它方面做得更好:准备好的语句如何防止 SQL 注入攻击?辅助函数- 在您更好地了解准备好的语句的工作原理后,您将需要此功能。https://phpdelusions.net/mysqli/simple2 - 面向对象我用面向对象的语法重写了这个。我发现它不那么冗长,而且通常更容易理解。你用语法改变你赢得了什么做准备好的语句,因为它们通常涉及更多的步骤(但为了更大的好处)$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()) {&nbsp; &nbsp; &nbsp; echo '<tr>';&nbsp; &nbsp; &nbsp; &nbsp; echo '<td>Answered by: '. $username .'</td>';&nbsp; &nbsp; &nbsp; echo '</tr>';&nbsp; &nbsp; &nbsp; echo '<tr>';&nbsp; &nbsp; &nbsp; &nbsp; echo '<td>'. $answer .'</td>';&nbsp; &nbsp; &nbsp; echo '</tr>';&nbsp; &nbsp; &nbsp; echo '<tr>';&nbsp; &nbsp; &nbsp; &nbsp; echo '<td>'. $date .'</td>';&nbsp; &nbsp; &nbsp; echo '</tr>';&nbsp; &nbsp; }&nbsp;echo '</table>';$stmt -> free_result();$stmt -> close();$con -> close();在我们挑选头发时,您应该尽量不要回显过多的 HTML。您可以在while循环内关闭 php ,它的工作方式相同。我还修复了您遇到的一些 HTML 问题。(应该使用<tbody>,只是为了好玩,我<thead>也在那里扔了一个// after bind result in the code above?><table>&nbsp; <thead>&nbsp; &nbsp; <th>Answered by</th>&nbsp; &nbsp; <th>Answer</th>&nbsp; &nbsp; <th>Date</th>&nbsp; </thead>&nbsp; <tbody>&nbsp; &nbsp; <?php&nbsp; &nbsp; while($stmt -> fetch()) {&nbsp; &nbsp; ?>&nbsp; &nbsp; <tr>&nbsp; &nbsp; &nbsp; <td><?php echo $username;?></td>&nbsp; &nbsp; </tr>&nbsp; &nbsp; <tr>&nbsp; &nbsp; &nbsp; <td><?php echo $answer;?></td>&nbsp; &nbsp; </tr>&nbsp; &nbsp; <tr>&nbsp; &nbsp; &nbsp; <td><?php echo $date;?></td>&nbsp; &nbsp; </tr>&nbsp; &nbsp; <?php&nbsp; &nbsp; }&nbsp; &nbsp; ?>&nbsp; </tbody></table>
打开App,查看更多内容
随时随地看视频慕课网APP