Если вы делаете сайт на PHP, рано или поздно данные придётся хранить. Логины, статьи, комментарии — всё это удобно складывать в базу. MySQL — самый популярный выбор. В этой статье разберём, как подключиться к базе, выполнять запросы и не наступить на грабли.
Почему MySQL и PHP — классическая связка
PHP и MySQL дружат давно. Оба бесплатные, простые в установке и работают почти на любом хостинге. Если вы только начинаете, эта пара — отличный старт. PHP умеет общаться с базой через расширения. Раньше все использовали mysql, потом mysqli, а сейчас стандарт — PDO.
PDO — это универсальный интерфейс. Он работает не только с MySQL, но и с PostgreSQL, SQLite и другими. Если завтра вы решите сменить базу, код переписывать почти не придётся. Поэтому советую сразу привыкать к PDO.
Подключение к базе: первые шаги
Для начала нужны данные: хост (обычно localhost), имя базы, логин и пароль. В PHP создаём объект PDO и передаём эти данные. Вот как это выглядит:
<?php
$host = 'localhost';
$db = 'test_db';
$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();
}
?>
Обратите внимание на опции. ERRMODE_EXCEPTION заставляет PDO выбрасывать исключения при ошибках — так вы их не пропустите. DEFAULT_FETCH_MODE = FETCH_ASSOC возвращает данные в виде ассоциативного массива, а EMULATE_PREPARES = false отключает эмуляцию подготовленных запросов — это важно для безопасности.
Основные операции: CRUD на практике
CRUD — это создание, чтение, обновление и удаление. Разберём каждый на примерах. Все запросы выполняем через подготовленные выражения (prepared statements). Это защита от SQL-инъекций.
Создание (INSERT)
<?php
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $pdo->prepare($sql);
$stmt->execute(['name' => 'Иван', 'email' => 'ivan@example.com']);
echo "Пользователь добавлен";
?>
Чтение (SELECT)
<?php
$stmt = $pdo->query("SELECT * FROM users");
$users = $stmt->fetchAll();
foreach ($users as $user) {
echo $user['name'] . ' — ' . $user['email'] . '<br>';
}
?>
Обновление (UPDATE)
<?php
$sql = "UPDATE users SET email = :email WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['email' => 'new@example.com', 'id' => 1]);
?>
Удаление (DELETE)
<?php
$sql = "DELETE FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => 1]);
?>
Как видите, всё просто. Главное — не забывать про подготовленные выражения. Они автоматически экранируют опасные символы.
Безопасность превыше всего
SQL-инъекции — главная головная боль при работе с базами. Хакер может ввести в форму что-то вроде ' OR '1'='1, и если вы вставляете данные напрямую в запрос, он получит доступ ко всей таблице. Подготовленные выражения решают эту проблему.
Вот как делать нельзя:
<?php
// Плохо! Уязвимо для инъекций
$name = $_POST['name'];
$pdo->query("SELECT * FROM users WHERE name = '$name'");
?>
А вот как нужно:
<?php
// Хорошо! Используем подготовленный запрос
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute(['name' => $_POST['name']]);
?>
Разница огромна. Всегда используйте плейсхолдеры (например, :name) и передавайте значения отдельно.
Полезные функции и параметры PDO
PDO предоставляет много возможностей. Вот основные методы и опции, которые стоит знать:
| Метод / Опция | Что делает |
|---|---|
| prepare() | Создаёт подготовленный запрос |
| execute() | Выполняет запрос с параметрами |
| query() | Выполняет простой запрос без параметров |
| fetch() | Возвращает одну строку результата |
| fetchAll() | Возвращает все строки в виде массива |
| lastInsertId() | ID последней вставленной записи |
| rowCount() | Количество затронутых строк |
| PDO::ATTR_ERRMODE | Режим обработки ошибок (исключения, предупреждения, тишина) |
| PDO::ATTR_DEFAULT_FETCH_MODE | Формат возвращаемых данных (ассоциативный, объект, число) |
Эти методы покрывают 90% задач. Освоив их, вы сможете строить полноценные приложения.
Заключение
Работа с MySQL через PDO — это просто, безопасно и удобно. Главное — использовать подготовленные выражения, не хранить пароли в коде и внимательно читать ошибки. Начните с малого: подключитесь к базе, сделайте пару запросов. Дальше пойдёт как по маслу.
Помните: база данных — это сердце вашего приложения. Относитесь к ней бережно, и она ответит вам надёжностью.


