oci_close — Закрывает соединение с сервером Oracle
Описание
booloci_close
( resource$connection
)
Освобождает connection. Соответствующее ему
соединение с базой данных будет закрыто при отсутствии использующих
его ресурсов и если оно было получено из функции
oci_connect() или oci_new_connect().
Рекомендуется закрывать неиспользуемые более соединения, т.к.
это освобождает ресурсы базы данных для других пользователей.
$stid = oci_parse($conn, 'SELECT * FROM departments'); // это увеличивает refcount на $conn oci_execute($stid); oci_fetch_all($stid, $res); var_dump($res);
oci_close($conn);
// $conn больше не может использоваться в данном скрипте, но реальное // соединение с базой данных будет открыто, пока не будет освобождена $stid. var_dump($conn); // выводит NULL
// Пока PHP спит, запрос к виду Oracle V$SESSION в окне терминала // покажет, что пользователь базы данных все еще подключен. sleep(10);
// Как только $stid освобождается, соединение к базе данных физически закрывается oci_free_statement($stid);
// Пока PHP спит, запрос к виду Oracle V$SESSION в окне терминала // покажет, что пользователь базы данных уже отключился. sleep(10);
?>
Пример #3 Закрытие соединения, открытого несколько раз
При повторном использовании учетных данных пользователя оба
соединения должны быть закрыты перед непосредственным закрытием
соединения к базе данных.
// Использование тех же учетных данных повторно использует одно и то же // соединение с базой данных. Любые незафиксированные изменения в // $conn1 будут видны в $conn2 $conn2 = oci_connect('hr', 'welcome', 'localhost/XE');
// Пока PHP спит, запрос к виду Oracle V$SESSION в окне терминала // покажет, что подключен только один пользователь базы данных. sleep(10);
oci_close($conn1); // не закрывает реальное соединение с базой данных var_dump($conn1); // выводит NULL, т.к. $conn1 теперь бесполезна var_dump($conn2); // показывает, что $conn2 все еще является корректным ресурсом соединения
?>
Пример #4 Соединение закрывается при уходе переменных из области видимости
Когда все переменные, ссылающиеся на соединение, уходят из области
видимости и освобождаются PHP, происходит откат транзакции (если
необходимо) и соединение с базой закрывается.
<?php
function myfunc() { $conn = oci_connect('hr', 'hrpwd', 'localhost/XE'); if (!$conn) { $e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); }
$stid = oci_parse($conn, 'UPDATE mytab SET id = 100'); oci_execute($stid, OCI_NO_AUTO_COMMIT); return "Закончили!"; }
$r = myfunc(); // В этой точке происходит откат транзакции и закрывается соответствующее // соединение с базой данных
print $r; // отображает возвращенное функцией значение "Закончили!"
?>
Примечания
Замечание:
Переменные, зависящие от идентификатора соединений, такие как
идентификаторы выражений, полученные из oci_parse(),
должны быть также освобождены до закрытия соединения с базой
данных.
Замечание:
До версии PHP 5.1.2 (PECL OCI8
1.1) oci_close() не выполняла никаких действий.
В более свежих версиях она уже корректно закрывает соединение.
Используйте директиву
oci8.old_oci_close_semantics
для восстановления старого поведения этой функции.
Замечание:
Функция oci_close() не закрывает соединения с
базой данных, созданные функцией oci_pconnect().
Замечание:
В версиях PHP до 5.0.0 необходимо использовать
ocilogoff() вместо этой функции. Старое имя функции также может быть использовано в текущих версиях, хотя оно уже устарело
и не рекомендуется.
Смотрите также
oci_connect() - Устанавливает соединение с базой данных Oracle
oci_free_statement() - Освобождает ресурсы, занимаемые курсором или SQL-выражением