Внутренний счётчик ссылок (refcount) идентификатора соединения
должен равняться нулю перед непосредственным закрытием соединения
к базе данных.
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$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);
?>