@Synacs-U
Html, CSS, Js, Jquery, PHP, Mysql

Как while присваивает значение результата запроса в бд?

Добрый день.
Как при таком запросе массив $data присваивает значение из $result?:
while($data[] = $result->fetch_assoc());
// где $data - свеже-созданный массив, а $result - результат запроса в бд

Дайте документацию по этому действию пожалуйста. Или объясните )
mysqli_result::fetch_assoc -- mysqli_fetch_assoc — Извлекает результирующий ряд в виде ассоциативного массива

По этому описанию он должен извлекать массив, но он делает это только при использовании while...

UPD: Так же интересно, как while вообще работает, ведь там нет условия. Там оператор присвоения "=".
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
@Synacs-U Автор вопроса
Html, CSS, Js, Jquery, PHP, Mysql
Кароче, в объекте mysqli_query (процедур...) есть приватная условная переменная $i, которая увеличивается при каждом использовании процедуры mysqli_fetch_assoc($result); ($result->num_row передаёт число выводимых массивов данных, которое присваивает себе условная $i).
По окончанию выводимых обьектов, начнутся выводиться 'null', что останавливает цикл.

Вот пример того, как работает mysqli_fetch_assoc.
$i = 0;
$array = array('Катя', 'Лёня', 'Ира', 'Оля');
while($data[] = $array[$i]) $i++;
var_dump($data);


Вот запрос с бд:
for($i = 0; $i <= ($result->num_rows+2); $i++){
    $mysqli_fetch_assoc[] = mysqli_fetch_assoc($result);
}


Вот пруф.
5d4812600e2be415101390.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
anton_reut
@anton_reut
Начинающий веб-разработчик
Нет при таком запросе у тебя цикл только проверяет true или false при каждой итерации но ЧТО он должен делать при true ты не указал в фигурных скобках (которых нет).
Ответ написан
@caballero
Программист
значит он извлекает укаатель на ресурс по которому можно ходить циклом поскольку ресурс реализует интерфейс итератора. И это не обязательно массив
Ответ написан
Ссылка документацию на https://www.php.net/manual/en/mysqli-result.fetch-...

Так же интересно, как while вообще работает, ведь там нет условия. Там оператор присвоения "=".


Думаю это натолкнет вас на ответ - Returns an associative array that corresponds to the fetched row or NULL if there are no more rows.

Если нет - то вперед изучать основы)
Ответ написан
Комментировать
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
$res = [];
while($data = $result->fetch_assoc()) {
    $res[] = $data;
}

То есть один ряд фетчится в переменную дата..
Пока есть ряды цикл продолжается
Ну а вообще есть fetch all
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы