PHP无休止地加载相同的内容

时间:2017-12-25 14:01:12

标签: php mysql sql mysqli infinite-loop

如何防止它再次加载相同的表格行并且永不停止?我的脑袋不能接受它...我知道我以某种方式创造了一个无限循环,所以我在互联网上搜索,我看到人们几乎一样,但不知怎的,它为他们工作。     

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";
}

?>

3 个答案:

答案 0 :(得分:3)

使用时

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的预准备语句并绑定您的值,而不是直接在查询中注入变量。

答案 1 :(得分:0)

改变这个:

$row = mysqli_fetch_assoc($result);

if ($row > 0)
{
    echo "it works";

   while($row)
   {
      echo htmlspecialchars($row["sender"] . ": " . $row["msg"]);
      echo "<br><br>";
   }
}

对此:

if (mysqli_num_rows($result) > 0)
{

    while($row = mysqli_fetch_assoc($result))
    {
        echo htmlspecialchars($row["sender"] . ": " . $row["msg"]);
        echo "<br><br>";
    }
}

答案 2 :(得分:0)

如果您的查询包含或不包含任何记录,您可以先使用mysqli_num_rows计算,如果有以下记录,则可以使用mysqli_fetch_assoc

$sql = "SELECT * FROM messages WHERE sender = $savedUsername";
$result = mysqli_query($conn, $sql);
$count = mysqli_num_rows($result);

if ($count > 0) {
    echo "it works";
    while($row = mysqli_fetch_assoc($result)) {
        echo htmlspecialchars($row["sender"] . ": " . $row["msg"]);
        echo "<br><br>";
    }
 }

始终使用准备好的语句使查询更加安全