oci_close
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_close — Ferme une connexion Oracle
Description
$connection
) : bool
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.
Liste de paramètres
-
connection
-
Un identifiant de connexion Oracle, retourné par la fonction oci_connect(), oci_pconnect(), ou oci_new_connect().
Exemples
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"
?>
Notes
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().
Voir aussi
- oci_connect() - Établit une connexion avec un serveur Oracle
- oci_free_statement() - Libère toutes les ressources réservées par un résultat Oracle
Version en cache
22/11/2024 22:06:40 Cette version de la page est en cache (à la date du 22/11/2024 22:06:40) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-oci-close.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.