Короткий ответ: для подключения PHP к MySQL лучше использовать PDO. Вы создаете строку подключения DSN, передаете имя пользователя и пароль, включаете нормальный режим ошибок и выполняете запросы через подготовленные выражения. Так код получается понятнее и безопаснее, чем прямое склеивание SQL-строк
Этот запрос обычно приходит, когда пользователь делает регистрацию, форму, каталог, админку или небольшой сайт. Поэтому важно не просто “подключиться”, а сразу показать рабочую основу: код подключения, проверочный запрос, выборку данных и безопасную вставку
Что нужно заранее
У вас должны быть данные подключения к базе
host: localhost
database: site_db
user: site_user
password: secret_password
На хостинге эти данные обычно создаются в панели управления. На локальном компьютере база может быть в XAMPP, Open Server, Docker или отдельном MySQL-сервере
Также нужен модуль pdo_mysql. Проверить его можно так
php -m | grep pdo_mysql
Или через phpinfo() в браузере
Подключение через PDO
Создайте файл db.php
<?php
$host = 'localhost';
$database = 'site_db';
$user = 'site_user';
$password = 'secret_password';
$dsn = "mysql:host={$host};dbname={$database};charset=utf8mb4";
$pdo = new PDO($dsn, $user, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
charset=utf8mb4 нужен, чтобы нормально хранить русский текст, эмодзи и современные символы. Без него можно получить проблемы с кодировкой
Проверочный запрос
<?php
require __DIR__ . '/db.php';
$result = $pdo->query('SELECT NOW() AS current_time')->fetch();
echo $result['current_time'];
Если вы видите дату и время из базы, подключение работает
Получение записей
Предположим, есть таблица users
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL
);
Получим список пользователей
<?php
require __DIR__ . '/db.php';
$users = $pdo->query('SELECT id, name, email FROM users ORDER BY id DESC')->fetchAll();
foreach ($users as $user) {
echo htmlspecialchars($user['name'], ENT_QUOTES, 'UTF-8') . '<br>';
}
htmlspecialchars() нужен при выводе в HTML, чтобы пользовательские данные не превратились в исполняемую разметку
Вставка данных через prepare
Нельзя вставлять пользовательские данные в SQL простым склеиванием строк. Используйте подготовленные запросы
<?php
require __DIR__ . '/db.php';
$name = 'Анна';
$email = 'anna@example.com';
$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
$stmt->execute([
'name' => $name,
'email' => $email,
]);
echo 'Пользователь добавлен';
Такой подход защищает от многих ошибок и SQL-инъекций, потому что значения передаются отдельно от текста запроса
Где хранить пароль от базы
Для учебного примера пароль можно оставить в db.php. Для рабочего сайта лучше вынести настройки в конфигурационный файл вне публичной папки или в переменные окружения
Плохая идея — показывать db.php в публичном репозитории вместе с реальными доступами. Если доступы утекли, меняйте пароль базы
Мини-практика
Создайте базу site_db, таблицу users, файл db.php и файл test-db.php. Сначала выполните SELECT NOW(), затем добавьте одного пользователя через prepare, затем выведите список пользователей на страницу
Если на каком-то этапе ошибка, не переписывайте весь код. Смотрите конкретно: подключение, наличие таблицы, логин и пароль, модуль pdo_mysql, имя базы и права пользователя
Частые ошибки
Не установлен pdo_mysql. PHP работает, но подключение к MySQL через PDO недоступно
Путают имя базы, логин и пароль. На хостинге пользователь базы и пользователь панели — не всегда одно и то же
Пишут localhost, хотя база находится на другом хосте. Это часто бывает на внешних базах или в Docker
Склеивают SQL-строку с пользовательским вводом. Для форм, регистрации и поиска используйте prepare
Не указывают utf8mb4. Потом появляются проблемы с русским текстом и символами
Выводят данные из базы без htmlspecialchars(). SQL-защита не заменяет безопасный вывод в HTML
Что почитать дальше по PHP
Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:
- PHP и MySQL через PDO: первая база без SQL-инъекций
- PHP-регистрация пользователя: форма, база данных и безопасный пароль
- Composer в PHP: установка пакетов без ручного копирования
- Joomla: как убрать index.php из адреса сайта



