PHP и SQL: цикл fetch_assoc / while при отображении данных становится бесконечным - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь подключиться к своей базе данных (она работает), и я хочу выбрать все данные в таблице «пользователи».Когда я отображаю данные, цикл с fetch_assoc() никогда не заканчивается.Я не понимаю, почему это происходит.

Есть идеи?

<!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 голосов
/ 27 декабря 2018

Именно здесь вы вызываете бесконечный цикл:

while($i = $resultArray) {

Это заставит код просто читать $resultArray в $i (первая строка данных, возвращаемых fetch_assoc) снова и снова.$resultArray никогда не меняется и не меняется $i, поэтому выражение никогда не будет оцениваться как false.

Вы должны знать, что когда вы делаете:

$resultArray = $result->fetch_assoc();

Выпросто получая одну строку данных из базы данных - вы не сможете получить несколько строк из базы данных с помощью $resultArray.

Следовательно, вторая версия верна:

while($i = $result->fetch_assoc()) {
0 голосов
/ 27 декабря 2018

В вашей версии вы только что получили одну строку из базы данных.Во втором фрагменте каждая итерация цикла выбирает еще одну строку из базы данных, пока курсор не будет исчерпан и не будет возвращен NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...