nmk

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

Тема: Зв’язок скрипта з MySQL. Написання файлу підключення db.php за допомогою абстракції PDO. Тестування з’єднання та обробка PDOException.

Мета: Зрозуміти принцип роботи PDO (PHP Data Objects), навчитись створювати безпечне підключення до реляційної бази даних та обробляти виняткові ситуації під час помилок з’єднання.

Технологічний стек: PHP (об’єкт PDO), MySQL / MariaDB, try...catch.

Завдання

  1. Відмовитись від використання застарілих розширень mysql_ та освоїти сучасне підключення через PDO.
  2. Створити окремий файл конфігурації підключення до бази db.php.
  3. Оголосити константи або змінні (DSN, Username, Password) для підключення.
  4. Огорнути спробу з’єднання у блок try { ... } catch (PDOException $e) { ... } для елегантного відловлювання помилок і уникнення технічних роздруківок секретів на екрані для користувачів.

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

Крок 1. Підготовка змінних для підключення

Створіть у корені вашого проєкту файл db.php. Для локального сервера (XAMPP) за замовчуванням пароль є порожнім рядком, а логін “root”.

<?php
$host = '127.0.0.1';
$db   = 'task_manager';
$user = 'root';
$pass = ''; // В MAMP чи Laragon зазвичай пароль 'root'
$charset = 'utf8mb4';

З цих даних будується конфігураційний рядок DSN (Data Source Name):

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

Крок 2. Об’єкт конфігурації PDO

Щоб з’єднання працювало безпечно та коректно, визначемо масив налаштувань ($options):

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

Це гарантує, що при серйозних помилках генеруватимуться змістовні Exceptions, а результати запитів приходитимуть нам у вигляді звичних асоціативних масивів.

Крок 3. Підключення через Try…Catch

Ініціалізація підключення (new PDO) — це операція, яка залежить від зовнішнього ресурсу. Сервер може бути вимкнений, і скрипт впаде з помилкою. Використовуємо try...catch:

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
    // Якщо все добре: echo "Підключення успішне!";
} catch (PDOException $e) {
    die("Помилка підключення до бази даних: " . $e->getMessage());
}
?>

Крок 4. Тестування з’єднання

Підключіть свій db.php до головного скрипта index.php за допомогою require_once 'db.php';. Запустіть сторінку index.php. Якщо ви не бачите помилок “Помилка підключення до бази даних” — це означає, що зв’язок успішно встановлено і об’єкт $pdo лежить в оперативній пам’яті готовий до виконання запитів на вставку і видачу документів.

Щоб точно перевірити catch, штучно змініть логін $user у db.php на хибний (наприклад root555), збережіть файл і оновіть сторінку в браузері.

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

  1. Що таке DSN (Data Source Name) і що в ньому зберігається?
  2. В чому полягає різниця між старішим mysqli розширенням і PDO (PHP Data Objects)? Основні аргументи використання PDO?
  3. Як і для чого використовується конструкція try...catch? Чи є PDOException єдиним можливим виключенням у PHP?
  4. Для чого ми встановили параметр PDO::FETCH_ASSOC за замовчуванням? Що він робить?
  5. Чому функцію підключення зазвичай виносять у відокремлений файл (наприклад, db.php), а не пишуть напряму зверху в файлі index.php? Який принцип тут застосовано?

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

  1. У файл lab11.md винести фрагмент коду вашого файлу db.php (особливо логічні блоки DSN і try...catch).
  2. Долучити два скриншоти:
    • “чиста” сторінка index.php (або просто текст “Підключення успішне”), коли логін і пароль збігаються.
    • сторінка з текстом виведеного die(), який був спровокований навмисно введеною помилкою пароля у файлі db.php.
  3. Зробити commit -> push на ваш репозиторій на платформі GitHub.
  4. Надати відповіді на контрольні запитання у lab11.md.