Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正在无休止地加载相同的内容_Php_Mysql_Sql_Mysqli_Infinite Loop - Fatal编程技术网

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

PHP正在无休止地加载相同的内容,php,mysql,sql,mysqli,infinite-loop,Php,Mysql,Sql,Mysqli,Infinite Loop,如何防止它再次加载同一个表行,并且永不停止?我的脑袋受不了。。。我知道我不知何故创造了一个无限循环,所以我在互联网上搜索,我看到人们做了几乎相同的事情,但不知何故它对他们有效。 include_once "additional_code/dbh.inc.php"; session_start(); $savedUsername = $_SESSION["username"]; if (!isset($savedUsername) || empty($savedUsername)) {

如何防止它再次加载同一个表行,并且永不停止?我的脑袋受不了。。。我知道我不知何故创造了一个无限循环,所以我在互联网上搜索,我看到人们做了几乎相同的事情,但不知何故它对他们有效。
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";
}

?>
包括一次“附加代码/dbh.inc.php”;
会话_start();
$savedUsername=$\会话[“用户名”];
如果(!isset($savedUsername)|为空($savedUsername)){
标题(“location:login.php”);
出口
}
$sql=“从发件人=$savedUsername”的邮件中选择*;
$result=mysqli\u查询($conn,$sql);
$row=mysqli\u fetch\u assoc($result);
如果($row>0){
呼应“它有效”;
while($row){
echo htmlspecialchars($row[“sender”]。“:”$row[“msg”]);
回声“

”; } } 否则{ 回应“它不工作”; } ?>
更改此选项:

$row = mysqli_fetch_assoc($result);

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

   while($row)
   {
      echo htmlspecialchars($row["sender"] . ": " . $row["msg"]);
      echo "<br><br>";
   }
}
$row=mysqli\u fetch\u assoc($result);
如果($row>0)
{
呼应“它有效”;
while($row)
{
echo htmlspecialchars($row[“sender”]。“:”$row[“msg”]);
回声“

”; } }
为此:

if (mysqli_num_rows($result) > 0)
{

    while($row = mysqli_fetch_assoc($result))
    {
        echo htmlspecialchars($row["sender"] . ": " . $row["msg"]);
        echo "<br><br>";
    }
}
if(mysqli\u num\u行($result)>0)
{
while($row=mysqli\u fetch\u assoc($result))
{
echo htmlspecialchars($row[“sender”]。“:”$row[“msg”]);
回声“

”; } }
当您使用

while($row) {
你实际上是在创造一个无止境的循环。因为
$row
是一个已定义的变量,所以它是一个不稳定的值-这使得它本质上成为

while (true) {
取而代之的是获取每一行,这意味着您必须提供
mysqli\u fetch\u assoc()
作为
while
的参数。您还需要检查行数,因为您现在正在获取第一行(它在循环中不可见)

if(mysqli\u num\u行($result)>0){
呼应“它有效”;
while($row=mysqli\u fetch\u assoc($result)){
echo htmlspecialchars($row[“sender”]。“:”$row[“msg”]);
回声“

”; } } 否则{ 回应“它不工作”; }
您还应该意识到,您的代码容易受到SQL注入攻击,您应该在MySQLi中使用prepared语句并绑定您的值,而不是直接在查询中注入变量


如果您的查询包含或不包含任何记录,您可以首先使用
mysqli\u num\u行进行计数,然后可以使用
mysqli\u fetch\u 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>";
    }
 }
$sql=“从发件人=$savedUsername”的邮件中选择*”;
$result=mysqli\u查询($conn,$sql);
$count=mysqli\u num\u行($result);
如果($count>0){
呼应“它有效”;
while($row=mysqli\u fetch\u assoc($result)){
echo htmlspecialchars($row[“sender”]。“:”$row[“msg”]);
回声“

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

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