nmk

Лабораторна робота №12 (2 години)

Тема: Читання завдань із бази. Заміна статичного списку масивів на результати, отримані під час виконання SQL-запиту в PHP.

Мета: Навчитись відправляти запити до бази даних MySQL, обробляти отриманий результат (ресурс), перетворювати його на масив і динамічно виводити у HTML.

Технологічний стек: PHP (PDO::query(), fetch()), MySQL (SELECT запит).

Завдання

  1. Видалити жорстко закодований (hardcoded) “фейковий” масив завдань у файлі index.php (який ви робили у Лабораторній 5).
  2. Написати SQL-запит на отримання всіх завдань (SELECT * FROM tasks).
  3. Виконати запит через об’єкт $pdo та отримати дані у вигляді PHP-масиву.
  4. “Згодувати” масив, отриманий з бази даних, уже готовому HTML-шаблону foreach.

Хід виконання роботи

Крок 1. Знищення застарілого коду (static mocks)

Відкрийте ваш index.php. Видаліть ту частину на початку файлу, де змінній $tasks = [ ... ]; вручну присвоювався багатовимірний масив із фейковими тестовими завданнями.

Крок 2. Виконання запиту SELECT

Оскільки в минулій роботі ви підключили require_once 'db.php'; зверху файла index.php, тут вам доступна змінна $pdo. Відправте найпростіший запит до бази:

$stmt = $pdo->query('SELECT * FROM tasks ORDER BY id DESC');

Метод query() виконує SQL-вираз відразу, без попередньої підготовки prepare(). Він повертає об’єкт PDOStatement (в код вище він збережений у $stmt), який містить усі рядки-результати з MySQL.

Крок 3. Обробка ресурсу та перетворення у масив

Щоб витягнути дані із $stmt і знову перевести їх у зрозумілий масив $tasks, так щоб наш подальший foreach навіть “не відчув різниці”, викличте спеціальний метод fetchAll():

$tasks = $stmt->fetchAll();

Пам’ятаєте налаштування PDO::FETCH_ASSOC з минулої роботи? Завдяки ньому fetchAll() акуратно спакує результати у багатовимірний асоціативний масив, де ключами будуть назви колонок ('title', 'priority'), а не їхні порядкові номери.

Крок 4. Візуальний контроль та тестування

Після цих дій можете додати рядок var_dump($tasks); під запитом, щоб подивитися, яку структуру вам сформувала база даних. Вона має бути ідентичною до тої, що ви писали вручну у 5-й лабораторній роботі. Видаліть або закоментуйте var_dump(). Оновіть сторінку в браузері. У вас мають вивестись всі ті тестові записи, які ви власноруч додали в phpMyAdmin ще у 10-й лабораторній! Додайте ще запис через GUI-інтерфейс phpMyAdmin, оновіть сторінку — він також негайно і автоматично відобразиться на сайті.

Контрольні запитання

  1. Що таке конструкція оператора SELECT * і чи безпечно/ефективно використовувати “зірочку” (*) в компаніях з високим навантаженням (HighLoad)?
  2. Яким об’єктом повертається результат роботи метода $pdo->query() і чому ми не можемо напряму обробляти його без виклику методів на зразок fetch() чи fetchAll()?
  3. Що робить конструкція ORDER BY id DESC у SQL-запиті (Крок 2) і які інші способи сортування (напрямки) існують?
  4. У чому полягатиме різниця між методами $stmt->fetch() та $stmt->fetchAll()?
  5. Що буде, якщо ми виконаємо запит SELECT, що підпадає під умову, яка нічого не повертає (результат пустий, нуль записів)? Якого типу дані поверне $stmt->fetchAll() у змінну $tasks?

Вимоги до звіту

  1. У файл lab12.md винести фрагмент коду, що демонструє SQL-запит та виклик fetchAll().
  2. Долучити скриншот браузера з відрендереним списком завдань (відрізок коду foreach, який малює HTML).
  3. Зробити commit і відправити код на платформу GitHub. У звіт прикріпити посилання на репозиторій.
  4. Надати розгорнуті письмові відповіді на 5 контрольних запитань у lab12.md.