Тема: Читання завдань із бази. Заміна статичного списку масивів на результати, отримані під час виконання SQL-запиту в PHP.
Мета: Навчитись відправляти запити до бази даних MySQL, обробляти отриманий результат (ресурс), перетворювати його на масив і динамічно виводити у HTML.
Технологічний стек: PHP (PDO::query(), fetch()), MySQL (SELECT запит).
index.php (який ви робили у Лабораторній 5).SELECT * FROM tasks).$pdo та отримати дані у вигляді PHP-масиву.foreach.static mocks)Відкрийте ваш index.php. Видаліть ту частину на початку файлу, де змінній $tasks = [ ... ]; вручну присвоювався багатовимірний масив із фейковими тестовими завданнями.
Оскільки в минулій роботі ви підключили require_once 'db.php'; зверху файла index.php, тут вам доступна змінна $pdo.
Відправте найпростіший запит до бази:
$stmt = $pdo->query('SELECT * FROM tasks ORDER BY id DESC');
Метод query() виконує SQL-вираз відразу, без попередньої підготовки prepare(). Він повертає об’єкт PDOStatement (в код вище він збережений у $stmt), який містить усі рядки-результати з MySQL.
Щоб витягнути дані із $stmt і знову перевести їх у зрозумілий масив $tasks, так щоб наш подальший foreach навіть “не відчув різниці”, викличте спеціальний метод fetchAll():
$tasks = $stmt->fetchAll();
Пам’ятаєте налаштування PDO::FETCH_ASSOC з минулої роботи? Завдяки ньому fetchAll() акуратно спакує результати у багатовимірний асоціативний масив, де ключами будуть назви колонок ('title', 'priority'), а не їхні порядкові номери.
Після цих дій можете додати рядок var_dump($tasks); під запитом, щоб подивитися, яку структуру вам сформувала база даних. Вона має бути ідентичною до тої, що ви писали вручну у 5-й лабораторній роботі.
Видаліть або закоментуйте var_dump().
Оновіть сторінку в браузері. У вас мають вивестись всі ті тестові записи, які ви власноруч додали в phpMyAdmin ще у 10-й лабораторній! Додайте ще запис через GUI-інтерфейс phpMyAdmin, оновіть сторінку — він також негайно і автоматично відобразиться на сайті.
SELECT * і чи безпечно/ефективно використовувати “зірочку” (*) в компаніях з високим навантаженням (HighLoad)?$pdo->query() і чому ми не можемо напряму обробляти його без виклику методів на зразок fetch() чи fetchAll()?ORDER BY id DESC у SQL-запиті (Крок 2) і які інші способи сортування (напрямки) існують?$stmt->fetch() та $stmt->fetchAll()?SELECT, що підпадає під умову, яка нічого не повертає (результат пустий, нуль записів)? Якого типу дані поверне $stmt->fetchAll() у змінну $tasks?lab12.md винести фрагмент коду, що демонструє SQL-запит та виклик fetchAll().foreach, який малює HTML).lab12.md.