[英]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.