(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_close — Ferme une connexion Oracle
$connection
)
Ferme une connexion connection
Oracle.
La connexion sera fermée si aucune ressource ne l'utilise et si
elle a été créée avec la fonction oci_connect()
ou la fonction oci_new_connect().
Il est recommandé de fermer les connexions qui ne vous sont plus nécessaires, rendant ainsi plus de ressources de disponible pour les autres utilisateurs.
connection
Un identifiant de connexion Oracle, retourné par la fonction oci_connect(), oci_pconnect(), ou oci_new_connect().
Cette fonction retourne TRUE
en cas de
succès ou FALSE
si une erreur survient.
Exemple #1 Fermeture d'une connexion
Les ressources associées avec une connexion doivent être fermée afin d'assurer à la base de données sous sous-jacente la fin des opération et ainsi, y libérer les ressources.
<?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');
$r = oci_execute($stid);
oci_fetch_all($stid, $res);
var_dump($res);
// Libération de l'identifiant de requête lors de la fermeture de la connexion
oci_free_statement($stid);
oci_close($conn);
?>
Exemple #2 Les connexions à la base de données sont fermées à partir du moment où les références le sont
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);
?>
Exemple #3 Fermeture d'un connexion ouverte plus d'une fois
Lorsque des identifiants de base de données sont réutilisés, toutes les connexions doivent être fermées avant que la connexion à la base de données sous-jacente le soit réellement.
<?php
$conn1 = oci_connect('hr', 'welcome', 'localhost/XE');
// L'utilisation des mêmes identifiants réutilise la même connexion à la base de données sous-jacente.
// Toutes les modifications non validées effectuées sur $conn1 seront visibles sur $conn2.
$conn2 = oci_connect('hr', 'welcome', 'localhost/XE');
// Pendant que PHP attend, le fait d'interroger la vue V$SESSION d'Oracle
// dans un terminal montrera qu'un seul utilisateur est connecté.
sleep(10);
oci_close($conn1); // ne ferme pas la connexion à la base de données sous-jacente
var_dump($conn1); // affiche NULL car la variable $conn1 n'est plus utilisable
var_dump($conn2); // affiche que $conn2 est toujours une ressource de connexion valide
?>
Exemple #4 Les connexions sont fermées lorsque les variables sortent du contexte
Lorsque toutes les variables référençant une connexion sortent du contexte et sont libérées par PHP, une annulation survient (si nécessaire) et la connexion sous-jacente à la base de données est fermée.
<?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 "Finished";
}
$r = myfunc();
// À ce moment, une annulation survient et la connexion sous-jacente à la base de données est fermée.
print $r; // affiche la valeur de retour de la fonction "Finished"
?>
Note:
Les variables ayant une dépendance à l'identifiant de connexion, comme les identifiants de requêtes retournés par la fonction oci_parse(), doivent être libérées avant de tenter de fermer la connexion sous-jacente à la base de données.
Note:
Avant la version PHP 5.1.2 (PECL OCI8 1.1) oci_close() ne fermait pas réellement la connexion Oracle. Dans les versions plus récentes, cette fonction ferme correctement la connexion Oracle. Utilisez l'option oci8.old_oci_close_semantics pour revenir à l'ancien comportement de cette fonction.
Note:
La fonction oci_close() ne ferme pas les connexions sous-jacentes à la base de données créées par la fonction oci_pconnect().