Подключения и управление подключениями

Для установки соединений создают экземпляры базового класса — PDO. Неважно, через какой драйвер разработчик взаимодействует с базой данных; объекты подключения создают по имени класса PDO, независимо от драйвера. Конструктор класса принимает аргументы, которые определят источник базы данных (англ. Data Source Name, DSN) и необязательные имя пользователя и пароль, если передали.

Пример #1 Подключение к БД MySQL

<?php

$dbh
= new PDO('mysql:host=localhost;dbname=test', $user, $pass);

?>

Модуль выбросит исключение PDOException, если при подключении возникнут ошибки. Исключение перехватывают и обрабатывают, или оставляют глобальному обработчику исключений приложения, который установили функцией set_exception_handler().

Пример #2 Пример обработки ошибок подключения

<?php

try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
} catch (
PDOException $e) {
// Например, через какое-то время повторить попытку соединения
}

?>

Внимание

Как и остальные исключения, исключение PDOException перехватывают явно — через блок catch или неявно — функцией set_exception_handler(). По умолчанию непойманное исключение преобразуется в фатальную ошибку уровня E_FATAL_ERROR. Фатальная ошибка будет содержать стек вызовов, из-за которой появляется риск утечки информации о соединении. Поэтому на сервере, который работает в производственной среде, в файле php.ini для опции display_errors устанавливают значение 0.

После успешного подключения к базе данных экземпляр класса PDO возвращается в скрипт. Соединение остаётся активным в течение жизни объекта PDO. Потребуется уничтожить объект, чтобы закрыть соединение. Объект уничтожают путём удаления ссылок на объект через присваивание значения null переменным, которые содержат объект. PHP автоматически закроет соединение по окончании работы скрипта, если не сделать этого явно.

Замечание: Другие ссылки, которые по-прежнему указывают на экземпляр PDO, также потребуется удалить. Такие ссылки остаются в экземпляре PDOStatement или в других переменных, которые ссылаются на тот же экземпляр PDO. Ссылки удаляют путём присваивания значения null переменной, которая ссылается на объект PDOStatement.

Пример #3 Пример закрытия соединения

<?php

$dbh
= new PDO('mysql:host=localhost;dbname=test', $user, $pass);

// С этого места пользуемся соединением...
$sth = $dbh->query('SELECT * FROM foo');

// ...а здесь соединение больше не требуется; закрываем его
$sth = null;
$dbh = null;

?>

Установка постоянных соединений с серверами баз данных часто приносит пользу приложениям. Постоянные соединения не закрываются при завершении работы скрипта, кешируются и переиспользуются, когда другой скрипт запрашивает соединение с теми же учётными данными. С постоянными соединениями не требуется создавать новые подключения при каждом обмене данными с базой, что увеличивает скорость работы таких приложений.

Пример #4 Постоянные соединения

<?php

$dbh
= new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));

?>

Значение параметра PDO::ATTR_PERSISTENT преобразовывается в логическое значение (bool): включить или выключить постоянные подключения, если только это не числовая строка (string), которая разрешает использовать несколько пулов постоянных подключений. Это приносит пользу, когда разные соединения используют несовместимые настройки, например, разные значения режима буферизации PDO::MYSQL_ATTR_USE_BUFFERED_QUERY.

Замечание:

Постоянные соединения включают путём добавления константы PDO::ATTR_PERSISTENT в массив параметров драйвера, которые передают конструктору класса PDO. Драйвер не будет использовать постоянные соединения, если установить этот атрибут методом PDO::setAttribute() после создания объекта.

Замечание:

При взаимодействии с ODBC-драйвером модуля PDO и если ODBC-библиотеки поддерживают объединение подключений в пул по протоколу ODBC, как это делают unixODBC и Windows, и, возможно, другие системы, то вместо постоянных PDO-соединений рекомендуют оставлять кеширование соединений на уровне ODBC-пула. Пул соединений драйвера ODBC разделяет соединения с другими модулями в процессе; если PDO-объект попросят кешировать соединение, то такое соединение не вернётся в пул соединений драйвера ODBC, из-за чего драйвер создаст дополнительные подключения для обслуживания других модулей.

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top