В этом руководстве вы шаг за шагом узнаете, как подключиться к базе данных MySQL в PHP с помощью PDO.

Необходимые условия

Перед подключением к серверу баз данных MySQL необходимо иметь:

  1. Сервер базы данных MySQL, базу данных и учетную запись, имеющую доступ к базе данных.
  2. Драйвер PDO MySQL, включенный в файле php.ini сервера.

Настройка параметров базы данных MySQL

Предположим, что у вас есть локальный сервер базы данных MySQL, который содержит следующую информацию:

  • Хостом является localhost.
  • База данных на локальном сервере баз данных называется bookdb.
  • Учетную запись с пользователем root и паролем 'S@cr@t1!', которая может получить доступ к базе данных bookdb.

В большинстве случаев в качестве локального сервера многие программисты используют OpenServer. Я также использую этот сервер на своем ноутбуке на Windows 10. Очень классный сервер и если вы будете его использовать — не поленитесь задонатить автору проекта.

В PHP мы можем создать файл config.php и разместить в нем параметры базы данных:

<?php

$host = 'localhost';
$db = 'bookdb';
$user = 'root';
$password = 'S@cr@t1!';

Чтобы использовать параметры базы данных, мы можем включить файл config.php с помощью конструкции require в любой php-файл на сервере:

<?php

require 'config.php';

Включение драйвера PDO_MySQL

PDO_MYSQL — это драйвер, реализующий интерфейс PDO. PDO использует драйвер PDO_MYSQL для подключения к базе данных MySQL.

Чтобы проверить, включен ли драйвер PDO_MYSQL, откройте файл php.ini. Файл php.ini часто находится в каталоге php. Например, вы можете найти файл php.ini в каталоге C:\xampp\php, если вы используете XAMPP под Windows.

Кроме того, различные версии PHP вы можете скачать с официального сайта на этой странице.

Ниже показана строка расширения в файле php.ini:

;extension=php_pdo_mysql.dll

Чтобы включить расширение, вам нужно раскомментировать его, удалив точку с запятой (;) из начала строки следующим образом:

extension=php_pdo_mysql.dll

После этого необходимо перезапустить веб-сервер, чтобы изменения вступили в силу.

Имя источника данных MySQL или DSN

PDO использует имя источника данных (DSN), которое содержит следующую информацию:

  • хост сервера базы данных
  • имя базы данных
  • имя пользователя
  • пароль для доступа к БД
  • другие параметры, такие как наборы символов и т. д.

PDO использует эту информацию для установления соединения с сервером базы данных. Для подключения к серверу базы данных MySQL используется следующий формат имени источника данных:

"mysql:host=host_name;dbname=db_name;charset=UTF8"

Например:

$dsn = "mysql:host=localhost;dbname=bookdb;charset=UTF8";
Обратите внимание, что charset UTF-8 устанавливает набор символов соединения с базой данных в UTF-8.

Подключение к MySQL

Следующий сценарий index.php иллюстрирует, как подключиться к базе данных bookdb на сервере баз данных MySQL с учетной записью root:

<?php

require 'config.php'; // подключение файла с данными от БД

$dsn = "mysql:host=$host;dbname=$db;charset=UTF8";

try {
	$pdo = new PDO($dsn, $user, $password);

	if ($pdo) {
		echo "Соединение с базой $db успешно!";
	}
} catch (PDOException $e) {
	echo $e->getMessage();
}

Как это работает.

Сначала создаем новый объект PDO с именем источника данных, пользователем и паролем. Объект PDO является экземпляром класса PDO.

Далее, выводим сообщение об успешном соединении с БД, если соединение установлено успешно, или сообщение об ошибке, если произошла ошибка соединения.

Если у вас все настроено правильно, вы увидите следующее сообщение:

Соединение с базой bookdb успешно!

Стратегии обработки ошибок

PDO поддерживает три различные стратегии обработки ошибок:

  • PDO::ERROR_SILENT — PDO устанавливает код ошибки для проверки с помощью методов PDO::errorCode() и PDO::errorInfo(). PDO::ERROR_SILENT — это режим по умолчанию.
  • PDO::ERRMODE_WARNING — помимо установки кода ошибки, PDO выдает сообщение E_WARNING.
  • PDO::ERRMODE_EXCEPTION — Помимо установки кода ошибки, PDO вызовет исключение PDOException.

Чтобы задать стратегию обработки ошибок, вы можете передать ассоциативный массив в конструктор PDO следующим образом:

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

Или вы можете использовать метод setAttribute() экземпляра PDO:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Устранение неполадок

Существует несколько распространенных проблем при подключении к базе данных MySQL.

Если драйвер MySQL не включен в файл php.ini, вы получите сообщение об ошибке:

could not find driver

Если вы указали неправильный пароль, вы получите следующее сообщение об ошибке:

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

Если вы указали неверное имя базы данных или база данных не существует, вы получите следующее сообщение об ошибке:

SQLSTATE[HY000] [1049] Unknown database 'bookdb'

Если вы укажете неверное имя хоста базы данных, появится следующее сообщение об ошибке:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: No such host is known.

Заключение

Включите драйвер PDO_MYSQL в файле php.ini для подключения к базе данных MySQL в PHP через PDO.

Создайте экземпляр класса PDO для установления соединения с базой данных MySQL.

Используйте конструктор PDO или метод setAttribute() для установки стратегии обработки ошибок.

Статьи # #