-
Notifications
You must be signed in to change notification settings - Fork 11
connect
В 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.
Так как генерируется оно при "фактической" попытке подключения, то при использовании отложенного подключения возникнуть оно может практически в любом месте программы.
Клонирование объекта базы вносит свои нюансы в вопросы подключения. Для подробностей см. соответствующий раздел.