02. Работа с MySQL и подключение через PDO
Введение в MySQL
MySQL — это одна из самых популярных систем управления базами данных. Она хранит информацию в таблицах и позволяет быстро получать, добавлять и изменять данные.База данных — это как таблица в Excel, только хранится на сервере и к ней можно обращаться через код.
Где использовать MySQL
- Хранение пользователей (логин, пароль, email)
- Комментарии, посты, заказы
- Любые данные, которые нужно сохранять между посещениями сайта
Создание базы данных
Самый простой способ — через phpMyAdmin, который уже установлен с XAMPP, Laragon или OpenServer.- Откройте http://localhost/phpmyadmin
- Нажмите «Создать базу данных»
- Введите имя: my_app
- Выберите кодировку: utf8mb4_general_ci
- Нажмите «Создать»
Теперь у вас есть пустая база данных с именем my_app.
Создадим таблицу пользователей
В phpMyAdmin выберите базу my_app и создайте таблицу users:- id — INT, AUTO_INCREMENT, PRIMARY KEY
- name — VARCHAR(100)
- email — VARCHAR(150)
- password — VARCHAR(255)
- created_at — TIMESTAMP (по умолчанию CURRENT_TIMESTAMP)
SQL-запрос для создания таблицы:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Теперь можно переходить к подключению через PHP.
Что такое PDO
PDO (PHP Data Objects) — это универсальный способ работы с базами данных. Его преимущества:- Поддержка множества СУБД (MySQL, PostgreSQL, SQLite и др.)
- Безопасность благодаря подготовленным выражениям (prepared statements)
- Удобный интерфейс и гибкость
Подключение к MySQL через PDO
Создайте файл db_connect.php:
<?php
$host = 'localhost';
$db = 'my_app';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo 'Подключение успешно!';
} catch (PDOException $e) {
echo 'Ошибка подключения: ' . $e->getMessage();
}
?>
Разбор кода
- $dsn — строка подключения (Data Source Name), содержит тип БД, хост, имя и кодировку.
- PDO::ATTR_ERRMODE — вывод ошибок в виде исключений (удобно для отладки).
- PDO::FETCH_ASSOC — возвращает строки как ассоциативный массив.
- try/catch — перехватывает ошибки подключения.
Добавление данных в таблицу
Добавим одного пользователя в таблицу users:
<?php
require 'db_connect.php';$sql = 'INSERT INTO users (name, email, password) VALUES (?, ?, ?)';
$stmt = $pdo->prepare($sql);
$stmt->execute(['Иван', 'ivan@mail.com', md5('12345')]);
echo 'Пользователь добавлен!';
?>
Такой запрос безопасен — даже если кто-то введёт вредоносные данные, PDO предотвратит SQL-инъекцию.
Выборка данных
<?php
$stmt = $pdo->query('SELECT * FROM users');
foreach ($stmt as $row) {
echo $row['name'] . ' (' . $row['email'] . ')<br>';
}
?>
Обновление и удаление
// Обновить имя пользователя
$stmt = $pdo->prepare('UPDATE users SET name = ? WHERE id = ?');
$stmt->execute(['Алексей', 1]);// Удалить пользователя
$stmt = $pdo->prepare('DELETE FROM users WHERE id = ?');
$stmt->execute([2]);
Типичные ошибки
- Ошибка "Access denied" — проверьте логин и пароль MySQL (обычно root / пустой пароль)
- Ошибка "Unknown database" — база данных my_app не создана
- Ошибка "could not find driver" — не установлен модуль pdo_mysql; активируйте его в php.ini
Мини-практика
Создайте скрипт users_list.php, который подключается к БД и выводит список всех пользователей в таблице:
<!doctype html>
<html lang='ru'>
<head><meta charset='utf-8'><title>Пользователи</title></head>
<body>
<h2>Список пользователей</h2>
<?php
require 'db_connect.php';
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch()) {
echo '<p>[/b]' . $row['name'] . '[/b] — ' . $row['email'] . '</p>';
}
?>
</body>
</html>
Итоги урока
Вы научились:- Создавать базы данных и таблицы в phpMyAdmin
- Подключаться к MySQL через PDO
- Выполнять запросы SELECT, INSERT, UPDATE, DELETE
- Использовать подготовленные выражения для защиты от SQL-инъекций