Skip to content

connect

Oleg Grigoriev edited this page Mar 26, 2016 · 4 revisions

Отложенное подключение и закрытие соединения

Отложенное подключение

В goDB используется отложенное подключение к базе.

То есть, объекты баз данных можно создавать в начале сценария, но фактическое подключение к серверу будет произведено только в момент когда это соединение непосредственно понадобится. Обычно этот момент - первый запрос к базе в рамках сценария.

Можно указать на то, что подключение требуется выполнить в момент создания объекта, путём отключения параметра _lazy:

$params = [
    'host' => 'localhost',
    'username' => 'vasa',
    '_lazy' => false,
];

Узнать, установленно ли на данный момент подключение, можно с помощью метода

bool DB::isConnected(void)

Подключиться вручную можно с помощью метода

bool DB::forcedConnect(void)

После вызова данного метода, подключение должно быть установлено или будет выброшено исключение. В качестве результата возвращается TRUE если соединение было установленно именно сейчас. FALSE - уже было установлено раньше. Пример использования:

$db->forcedConnect();

startOperation();
// some code ...
stopOperation();

В этом примере "some code" - какая-то последовательность действий, которую нужно выполнить крайне быстро. Здесь не нужны лишние затраты на установку соединения. И тем более не нужны возможные ошибки при подключении.

Закрытие соединения

bool DB::close([[$soft = false|bool]]);

Данный метод закрывает соединение. Если оно было уже закрыто или ещё не установлено, то ничего не происходит.

Закрыть соединение можно двумя способами. По умолчанию используется жёсткий способ: открыть соединение через данный объект больше нельзя. Все попытки запросов, а так же forcedConnect() будут генерировать исключение Closed.

Узнать, закрыто ли соединение жёстким образом можно с помощью метода:

bool DB::isClosed()

Указание TRUE в качестве аргумента $db->close(true) приводит к мягкому закрытию подключения. Любая попытка запроса через данный объект приведёт к новому подключению. Пример (какой-то "долгоиграющий" cron-сценарий):

$db->query( /* ... */ );
$db->query( /* ... */ );
$db->query( /* ... */ );

$db->close(true);

// some code ...

$db->query( /* ... */ );
$db->query( /* ... */ );
$db->query( /* ... */ );

some code - какие-то очень длительные операции, не связанные с БД на которую указывает $db. Всё это время подключение лучше не занимать.

Ошибки при подключении

В случае, если при подключении происходит ошибка, генерируется исключение Connect.

Так как генерируется оно при "фактической" попытке подключения, то при использовании отложенного подключения возникнуть оно может практически в любом месте программы.

Клонирование объекта

Клонирование объекта базы вносит свои нюансы в вопросы подключения. Для подробностей см. соответствующий раздел.

Clone this wiki locally