L'identifiant interne comptant les connexions doit valoir zéro
pour pouvoir fermer la connexion.
<?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'); // ceci incrémente le compteur interne $conn
oci_execute($stid);
oci_fetch_all($stid, $res);
var_dump($res);
oci_close($conn);
// $conn n'est plus utilisable dans le script mais la connexion sous-jacente à
// la base de données est toujours ouverte tant que $stid n'est pas libéré.
var_dump($conn); // affiche NULL
// Pendant que PHP attend, le fait d'interroger la vue V$SESSION d'Oracle
// dans un terminal montrera qu'un utilisateur est toujours connecté.
sleep(10);
// Lorsque $stid est libéré, la connexion à la base de données sera physiquement fermée
oci_free_statement($stid);
// Pendant que PHP attend, le fait d'interroger la vue V$SESSION d'Oracle
// dans un terminal montrera que l'utilisateur s'est déconnecté.
sleep(10);
?>