PHP и серверы

PHP подключения к базе данных

📅 ⏱ 21:18 ⏳ 1 мин 💬 0

Php подключения к базе данных: простыми словами, по шагам и с примерами. Разбираем, как это работает на практике, типичные ошибки и лучшие решения. Раскрываем т

Коротко: подключиться к базе данных в PHP проще всего через PDO: создаёте объект с DSN, логином и паролем, а запросы выполняете подготовленными выражениями. Старое расширение mysql_* удалено и небезопасно; mysqli — альтернатива, но PDO удобнее (работает с разными СУБД).

Кому и зачемРабота с базой — базовая задача: вывод списка, сохранение формы, авторизация. Главное правило — никогда не подставлять данные пользователя в SQL «как есть».

Что использовать

Расширение Особенности
PDO единый API, поддержка разных СУБД, подготовленные запросы
mysqli только MySQL, процедурный и объектный стиль
mysql_* удалено, использовать нельзя

Вкладки: пошагово




CODE
$dsn = 'mysql:host=localhost;dbname=my_db;charset=utf8mb4';

$pdo = new PDO($dsn, 'user', 'password', [
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);

Параметры лучше держать в конфиге (или константах), а не в коде страницы. Кодировка utf8mb4 — стандарт для современных сайтов.

CSS
$stmt = $pdo->prepare('SELECT id, title FROM posts WHERE status = ? ORDER BY id DESC');
$stmt->execute(['published']);

foreach ($stmt as $row) {
  echo $row['title'];
}

Значения передаются в execute() отдельно от SQL — это и защищает от инъекций.

CODE
$stmt = $pdo->prepare(
  'INSERT INTO messages (name, email, body) VALUES (:name, :email, :body)'
);

$stmt->execute([
  ':name'  => $name,
  ':email' => $email,
  ':body'  => $body,
]);

$id = $pdo->lastInsertId();

Именованные параметры читаются лучше позиционных. lastInsertId() вернёт ID новой записи.

  • включите ERRMODE_EXCEPTION — ошибки будут исключениями;
  • оборачивайте операции в try/catch;
  • не показывайте текст ошибок посетителям, пишите в лог;
  • используйте подготовленные выражения — никогда не склеивайте SQL;
  • закрывайте соединение при необходимости: $pdo = null;;
  • не храните пароль в публичных файлах.
SQL-инъекцияКонкатенация: "SELECT * FROM users WHERE login = '$login'" — классическая уязвимость. Через подготовленные выражения (как в примерах) такого не случится.

Практика: подключение в проекте

  1. Вынесите параметры подключения в отдельный конфиг.
  2. Создавайте PDO один раз и переиспользуйте.
  3. Включите режим исключений.
  4. Все запросы — только через prepare/execute.
  5. Обрабатывайте ошибки и логируйте.
  6. Проверьте работу на копии базы.

Частые ошибки: причина → решение

Симптом Причина Решение
«Access denied» неверные логин/пароль сверить данные
Кракозябры не задана кодировка charset=utf8mb4
Ошибки не видны режим ошибок по умолчанию ERRMODE_EXCEPTION
Уязвимость конкатенация SQL подготовленные выражения

Проверьте себя

Чек-лист




Какое расширение использовать для подключения?




Что защищает от SQL-инъекций?




Вопросы и ответы

PDO удобнее: единый интерфейс, именованные параметры, поддержка разных баз данных. mysqli берите, если работаете только с MySQL и привыкли к нему.

PHP закрывает его сам при завершении скрипта. Явно — если процесс долгий или соединений много.

Ловите исключения и показывайте нейтральное сообщение, а детали пишите в лог. Посетителю не нужны названия таблиц и путей.

Строка подключения: тип базы, хост, имя базы и кодировка. Например, mysql:host=localhost;dbname=my_db;charset=utf8mb4.

Итоги

  • Подключение — через PDO (или mysqli), параметры в конфиге.
  • Все запросы — подготовленные выражения.
  • Режим исключений и логирование ошибок обязательны.
  • mysql_* использовать нельзя.
Поделиться: ВКонтакте Telegram WhatsApp Одноклассники Viber Мой Мир

Комментарии

Пока комментариев нет — будьте первым, кто поделится мнением.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получите консультацию нашего маркетолога

Изучит ваш проект, подберет подходящие услуги и тарифы

Получите бесплатный аудит

Наш специалист сделает базовый аудит вашего проекта и предложит персональные предложения.

Закажите услугу Каталог морепродуктов

Наш специалист свяжется с вами в ближайшее время и уточнит детали

Закажите адаптивный сайт

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт лендинг

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт каталог

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите интернет-магазин

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите веб-приложение

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите тариф Аутсорс

Стоимость от 150 000 ₽

Закажите тариф Магазин

Стоимость 90 000 ₽

Закажите тариф Классический

Стоимость 60 000 ₽

Закажите тариф Эконом

Стоимость 40 000 ₽

Закажите SEO продвижение

Наш специалист свяжется с вами, проведет анализ, предложит стоимость