簡體   English   中英

PHP無休止地加載相同的內容

[英]PHP is loading the same content endlessly

我如何防止它再次加載相同的表行並且永不停止? 我的腦袋不能接受它...我知道我以某種方式創造了一個無限循環,所以我在互聯網上搜索,我看到人們幾乎一樣,但不知怎的,它為他們工作。

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的預准備語句並綁定您的值,而不是直接在查詢中注入變量。

改變這個:

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

如果您的查詢包含或不包含任何記錄,您可以先使用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>";
    }
 }

始終使用Prepared Statements使查詢更安全

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM