Подключение к базе данных MySQL в PHP через PDO

Короткий ответ: для подключения 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. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x