В этом руководстве вы шаг за шагом узнаете, как подключиться к базе данных MySQL в PHP с помощью PDO.
Содержание
Необходимые условия
Перед подключением к серверу баз данных MySQL необходимо иметь:
- Сервер базы данных MySQL, базу данных и учетную запись, имеющую доступ к базе данных.
- Драйвер 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";
Подключение к 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()
для установки стратегии обработки ошибок.