PHP无限循环问题

3

我能够使正确的代码工作,但我想能够使用对象和方法,但这并不起作用。查询在重复相同的数据库条目时会崩溃。我看到其他人在while语句内有查询,但我认为我正在使用的方法只应查询一次语句,但我很可能是错误的。谢谢。

<?php
include '/functions/MySQL.php';
$MySQL = new MySQL;
$con = mysqli_connect("host","user","password","db");
$result = mysqli_query($con,"SELECT * FROM reportLogger WHERE Moderator='jackginger'");
while($row = mysqli_fetch_array($MySQL->getReports('jackginger'))) {
    $time           = $row['Time'];
    $moderator      = $row['Moderator'];
    $reason         = $row['Reason'];

    // Now for each looped row

    echo "<tr><td>".$time."</td><td>".$moderator."</td><td>".$reason."</td></tr>";
}
?>

分离的类

public function __construct(){
        $this->con = mysqli_connect("localhost","root","pass","Minecraft");
        // Check connection
        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
    }

    public function getUUID($username) {
        $result = mysqli_query($this->con,"SELECT UUID FROM loginLogger WHERE Username='" . $username . "'");
        return mysqli_fetch_array($result)[0];
    }

    public function getReports($username) {
        $result = mysqli_query($this->con,"SELECT * FROM reportLogger WHERE UUID='" . $this->getUUID($username) . "'");
        return $result;
    }

你需要将 $MySQL->getReports('jackginger') 存储在一个单独的变量中,然后使用 mysqli_fetch_array($your_temp_var) 调用它。 - Dave Chen
仅仅是因为查询被反复调用了吗? - cfil360
是的,原因是因为您正在告诉$row等于mysqli将提取的第一个元素。如果它有多个项,它将继续提取第一个项目并永远不会停止。即使它只有一个项目,它也会继续提取,因为它从来没有达到$row === false;的点。 - Dave Chen
1个回答

3
每次调用while($row = mysqli_fetch_array($MySQL->getReports('jackginger'))),都会进行一次新的查询,因此它会一遍又一遍地获取相同的数据。
解决方法可以是:
<?php
include '/functions/MySQL.php';
$MySQL = new MySQL;
$con = mysqli_connect("host","user","password","db");
$result = mysqli_query($con,"SELECT * FROM reportLogger WHERE Moderator='jackginger'");
$store = $MySQL->getReports('jackginger');
while($row = mysqli_fetch_array($store)) {
    $time           = $row['Time'];
    $moderator      = $row['Moderator'];
    $reason         = $row['Reason'];

    // Now for each looped row

    echo "<tr><td>".$time."</td><td>".$moderator."</td><td>".$reason."</td></tr>";
}
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接