Получение результата при SQL запросе в PHP

В предыдущем уроке мы сделали тестовый код. Напомню его существенную часть, выполняющую запрос к базе:

<?php $query = 'SELECT * FROM users'; $result = mysqli_query($link, $query) or die(mysqli_error($link)); var_dump($result); ?>

Как вы видите, после того, как произойдет запрос к базе, в переменной $result будет лежать результат этого действия. Однако лежит он не в той форме, которая нам нужна в PHP, а в той форме, в которой его прислала нам база.

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

Давайте попробуем:

<?php $row = mysqli_fetch_assoc($result); var_dump($row); ?>

В результате var_dump выведет массив с первым работником:

<?php ['id' => 1, 'name' => 'user1', 'age' => 23, 'salary' => 400] ?>

При этом из переменной $result первый работник исчезнет, и следующий вызов mysqli_fetch_assoc получит уже следующего работника.

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

Давайте попробуем:

<?php $row1 = mysqli_fetch_assoc($result); var_dump($row1); // работник номер 1 $row2 = mysqli_fetch_assoc($result); var_dump($row2); // работник номер 2 $row3 = mysqli_fetch_assoc($result); var_dump($row3); // работник номер 3 $row4 = mysqli_fetch_assoc($result); var_dump($row4); // работник номер 4 $row5 = mysqli_fetch_assoc($result); var_dump($row5); // работник номер 5 $row6 = mysqli_fetch_assoc($result); var_dump($row6); // работник номер 6 $row7 = mysqli_fetch_assoc($result); var_dump($row7); // выведет NULL - работники кончились ?>

Получение в виде массива

При считывании по рядам можно не выводить каждого работника, а записывать их в какой-нибудь массив:

<?php $row1 = mysqli_fetch_assoc($result); $data[] = $row1; $row2 = mysqli_fetch_assoc($result); $data[] = $row2; $row3 = mysqli_fetch_assoc($result); $data[] = $row3; $row4 = mysqli_fetch_assoc($result); $data[] = $row4; $row5 = mysqli_fetch_assoc($result); $data[] = $row5; $row6 = mysqli_fetch_assoc($result); $data[] = $row6; ?>

В результате в переменной $data получится следующий двухмерный массив:

<?php [ ['id' => 1, 'name' => 'user1', 'age' => 23, 'salary' => 400], ['id' => 2, 'name' => 'user2', 'age' => 25, 'salary' => 500], ['id' => 3, 'name' => 'user3', 'age' => 23, 'salary' => 500], ['id' => 4, 'name' => 'user4', 'age' => 30, 'salary' => 900], ['id' => 5, 'name' => 'user5', 'age' => 27, 'salary' => 500], ['id' => 6, 'name' => 'user6', 'age' => 28, 'salary' => 900], ] ?>

Формируем массив в цикле

Конечно же, в ручную перебирать всех работников не очень удобно. Пусть лучше за нас это сделает цикл:

<?php for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row); var_dump($data); // здесь будет массив с результатом ?>

Давайте разберемся, как работает этот цикл.

В каждой итерации цикла функция mysqli_fetch_assoc последовательно считывает каждую строку результата, записывая его в массив $data.

Как только в $result закончатся строки, то mysqli_fetch_assoc вернет NULL и цикл закончит свою работу. А полученный результат будет лежать в двухмерном массиве $data.

С помощью описанного цикла получите и выведите через var_dump на экран массив всех работников.

Из полученного результата получите первого работника. Через echo выведите на экран его имя.

Из полученного результата получите второго работника. Через echo выведите на экран его имя и возраст.

Из полученного результата получите третьего работника. Через echo выведите на экран его имя, возраст и зарплату.