如何防止它再次重新加载同一表行并且永不停止?我的头无法承受……我知道我以某种方式创建了一个无限循环,所以我在互联网上进行搜索,我看到人们在做几乎相同的事情,但是以某种方式对他们有用.
include_once "additional_code/dbh.inc.php";
session_start();
$savedUsername = $_SESSION["username"];
if (!isset($savedUsername) || empty($savedUsername)) {
header("location: login.php");
exit;
}
$sql = "SELECT * FROM messages WHERE sender = $savedUsername";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
if ($row > 0) {
echo "it works";
while($row) {
echo htmlspecialchars($row["sender"] . ": " . $row["msg"]);
echo "<br><br>";
}
}
else {
echo "It doesn't work";
}
?>
解决方法:
使用时
while($row) {
您实际上正在创建一个无限循环.因为$row是一个定义的变量,所以它是一个实际值-这使得它本质上成为
while (true) {
相反,您要获取的是每一行,这意味着您必须提供mysqli_fetch_assoc()作为while的参数.您还希望改为检查行数,因为现在正在获取第一行(在循环中不可见).
if (mysqli_num_rows($result)> 0) {
echo "it works";
while($row = mysqli_fetch_assoc($result)) {
echo htmlspecialchars($row["sender"] . ": " . $row["msg"]);
echo "<br><br>";
}
}
else {
echo "It doesn't work";
}
您还应该意识到,您的代码容易受到SQL注入攻击的侵害,并且您应将预处理的语句与MySQLi一起使用并绑定值,而不是将变量直接注入查询中.
> How can I prevent SQL injection in PHP?