La cuenta de referencias interna de un identificador de conexión debe ser cero
antes de que sea cerrada la conexión subyacente a la base de datos.
<?php
$conexión = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conexión) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conexión, 'SELECT * FROM departments'); // esto incrementa la cuenta de referencias de $conn
oci_execute($stid);
oci_fetch_all($stid, $res);
var_dump($res);
oci_close($conexión);
// $conexión ya no puede ser utilizada en el script, pero la conexión subyacente
// a la base de datos aún se mantiene abierta, hasta que $stid sea liberado.
var_dump($conexión); // imprime NULL
// Mientras PHP duerme, consultar la vista V$SESSION de Oracle en una
// ventana terminal mostrará que el ususario de la base de datos que aún está conectado.
sleep(10);
// Cuando $stid es liberado, la conexión a la base de datos se cierra físicamente
oci_free_statement($stid);
// Mientras PHP duerme, consultar la vista V$SESSION de Oracle en una
// ventana terminal mostrará que el ususario de la base de datos se ha desconectado.
sleep(10);
?>