Работа с MySQL через PDO

PDO. Создание подключения

Последнее обновление: 07.06.2021

Для создания подключения к серверу базы данных в PDO применяется конструктор new PDO(), который принимает в качестве параметров настройки подключения:

1
new PDO("mysql:host=адрес_сервера;port=номер_порта;dbname=имя_базы_данных", "имя_пользователя", "пароль")

Принимаемые параметры:

При успешном подключении вызов конструктора new PDO() возвращает созданный объект PDO, который представляет установленное подключение и через который мы сможем взавмодействовать с базой данных. Однако если установка подключения прошла неудачно (например, сервер базы данных недоступен, указаны неправильные имя пользователя и/или пароль, какая-то еще ошибка), то вызов конструктора генерирует исключение. Соответственно вызов данного конструктора лучше помещать в конструкцию try..catch

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

1
2
3
4
5
6
7
8
9
10
<?php
try {
    // подключаемся к серверу
    $conn = new PDO("mysql:host=localhost", "root", "mypassword");
    echo "Database connection established";
}
catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
?>

Здесь производится подключение к локальному серверу, поэтому в строке подключения параметр host имеет значение "localhost". Поскольку база данных пока не важна, то параметр dbname не указан. Подключение производится для пользователя - пользователя "root", для которого установлен пароль "mypassword".

"root" - это пользователь по умолчанию, который существует для сервера MySQL. А "mypassword" - пароль, установленный для этого пользователя. Естественно в каждом конкретном случае пароль для этого пользователя может отличаться. Однако если на сервере MySQL созданы другие пользователи, то можно указывать этих пользователей и их пароли.

При успешном подключении созданный объект PDO будет сохранен в переменную $conn, через которую мы затем сможем взаимодействовать с MySQL:

1
$conn = new PDO("mysql:host=localhost", "root", "mypassword");

Если произойдет ошибка, то будет сгенерировано исключение типа PDOException. Как и у других классов исключений с помощью метода getMessage() мы можем получить сообщение об ошибке.

И при успешном подключении мы увидим в браузере следующее сообщение:

Database connection established

А если произойдет ошибка, то браузер выведет сообщение об ошибке. Например, сообщение об ошибке при некорректном пароле:

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

Установка режима вывода ошибок

Если при взаимодействии с MySQL произойдет ошибка, то, как правило, ожидается, что мы получим сообщение об ошибке. Однако реальное поведение зависит от редима вывода ошибок, который установлен для объекта PDO. Режим вывода ошибок задается с помощью атрибута PDO::ATTR_ERRMODE, который может принимать следующие значения:

Если мы хотим получать информацию об ошибке через исключение PDOException и обрабатывать его в блоке catch, то нам нужно значение PDO::ERRMODE_EXCEPTION. В PHP 8.0 и выше это значение применяется по умолчанию, однако, если версия ниже 8.0, то необходимо это значение установить явным образом с помощью метода setAttribute() объекта PDO:

1
2
3
4
5
6
7
8
9
try {
    $conn = new PDO("mysql:host=localhost", "root", "mypassword");
    // установка режима вывода ошибок
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Database connection established";
}
catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

Закрытие подключения

После завершения работы скрипта PHP автоматически закрывает открытые подключения к базе данных. Но может потребоваться закрыть подключение еще в процессе работы скрипта. В этом случае объекту PDO можно присвоить значение null:

1
$conn = null;  // отключаемся от сервера базы данных