WHILE LOOP + mysqli_fetch_object - PullRequest
       9

WHILE LOOP + mysqli_fetch_object

0 голосов
/ 13 декабря 2018

Я не понимаю почему этот код работает:

while ($row = mysqli_fetch_object($result)){
    echo $row->id . " ";
    echo $row->first_name . " ";
    echo $row->last_name . "<br>";
}

Это часть учебника по CRUD, который я изучаю.Цикл while проходит всю таблицу и перечисляет все строки и столбцы.Но, исходя из моего понимания while -циклов, это не должно работать.

Я полагаю, что он должен пытаться распечатать текущую строку бесконечное количество раз и завершить работу моего браузера, так как нет изменений всостояние.Почему он проходит через все строки?Почему это останавливается?Я нигде не могу найти ответ на этот вопрос.

Был бы кто-нибудь достаточно любезный, чтобы объяснить простыми словами?

Ответы [ 2 ]

0 голосов
/ 29 июля 2019

Вы предполагаете, что условие не меняется.Вот где ты не прав.Вы можете переназначить значения внутри условия while.Результат

while ($row = mysqli_fetch_object($result))

mysqli_fetch_object сохраняется в переменной $row на каждой итерации.Переменная $row будет оцениваться как логическое значение, и если $row является объектом, он будет правдивым и, следовательно, попадет внутрь тела цикла.

Итак, на первой итерации вы получитесначала $row, затем второй и т. д.

Если строк больше нет, mysqli_fetch_object вернет null.Null будет сохранен в переменной $row и оценен.Null является ложным значением, и, следовательно, цикл прервется.

Скорее всего, вы неверно истолковываете состояние вашего мозга как:

  • $row == mysqli_fetch_object($result)
  • $row === mysqli_fetch_object($result)

Это полностью меняет значение.


Sidenote: переназначение в условиях - это то, что php допускает и в разных местах и ​​может привести к-debug ошибки.

Например, if ($bool = false) { echo "I never will be printed";} является действительным php и всегда приводит к проверке false и, следовательно, никогда не выполняет true-ветвь.

0 голосов
/ 29 июля 2019

Каждая выборка получает строку и завершается успешно, что дает значение true, поэтому цикл while продолжается.Когда больше нет доступных строк для извлечения, выборка возвращает false, и цикл while заканчивается.

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