PHP和SQL:fetch_assoc / while循环在显示数据时变为无限

时间:2018-12-27 11:38:06

标签: php mysql database

我正在尝试连接到我的数据库(正在运行),并且我想选择表“ users”中的所有数据。当我显示数据时,fetch_assoc()的while循环永远不会结束。我不明白为什么会这样。

有什么想法吗?

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>My first project!</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>

<?php
    $servername = "localhost";
    $user = "root";
    $password = "";
    $db = "mydb";

    $connection = new mysqli($servername, $user, $password, $db);

    if($connection->connect_error) {
        die("Es ist ein Fehler aufgetreten: $connection->connect_error");
    }

    $sql = "SELECT * FROM users";
    $result = $connection->query($sql);
    $resultArray = $result->fetch_assoc();

    if($result->num_rows > 0) {
        while($i = $resultArray) {
            echo "ID: " . $i["id"] . "<br>Name: " . $i["username"];
        }
    } 
?>
</body>
</html>

如果我尝试使用此版本,则该版本有效-因此我不明白为什么“我的版本”无效。我只是想稍微适应一下。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>My first project!</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>

<?php
    $servername = "localhost";
    $user = "root";
    $password = "";
    $db = "mydb";

    $connection = new mysqli($servername, $user, $password, $db);

    if($connection->connect_error) {
        die("Es ist ein Fehler aufgetreten: $connection->connect_error");
    }

    $sql = "SELECT * FROM users";
    $result = $connection->query($sql);

    if($result->num_rows > 0) {
        while($i = $result->fetch_assoc()) {
            echo "ID: " . $i["id"] . "<br>Name: " . $i["username"];
        }
    }
?>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

在您的版本中,您只是从数据库中获取了一行。在第二个代码段中,循环的每次迭代都从数据库中获取另一行,直到游标耗尽并且返回NULL

答案 1 :(得分:1)

就在这里导致无限循环:

while($i = $resultArray) {

这将导致代码一次又一次地将$resultArray读入$ifetch_assoc返回的第一行数据)中。 $resultArray永远不会改变,$i也不会改变,因此该表达式永远不会求值为false

您需要注意以下事项:

$resultArray = $result->fetch_assoc();

您仅从数据库中获取一行数据-您将无法使用$resultArray从数据库中获取多个行。

因此第二个版本正确:

while($i = $result->fetch_assoc()) {