Connexions et gestionnaire de connexion

Les connexions sont établies en créant des instances de la classe de base de PDO. Peu importe quel pilote l'on veut utiliser ; l'on utilise toujours le nom de la classe PDO. Le constructeur accepte des paramÚtres pour spécifier la source de la base de données (connue en tant que DSN) et optionnellement, le nom d'utilisateur et le mot de passe (s'il y en a un).

Exemple #1 Connexion Ă  MySQL

<?php
$dbh
= new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>

S'il y a des erreurs de connexion, un objet PDOException est lancé. Il est possible d'attraper cette exception pour gérer cette erreur, ou laisser le gestionnaire global d'exception défini via la fonction set_exception_handler() la traiter.

Exemple #2 Gestion des erreurs de connexion

<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
} catch (
PDOException $e) {
// tenter de réessayer la connexion aprÚs un certain délai, par exemple
}
Avertissement

Comme toutes les autres exceptions, PDOException peut ĂȘtre capturĂ©e soit explicitement, par une instruction catch, soit implicitement via set_exception_handler(). Sinon, le comportement par dĂ©faut consistant Ă  convertir une exception non capturĂ©e en une E_FATAL_ERROR se produira. L'erreur fatale contiendra un backtrace qui peut laisser Ă©chapper des dĂ©tails sur la connexion. Ainsi, l'option php.ini display_errors doit ĂȘtre dĂ©finie Ă  0 sur un serveur de production.

Lorsque la connexion à la base de données a réussi, une instance de la classe PDO est retournée au script. La connexion est active tant que l'objet PDO l'est. Pour clore la connexion, il faut détruire l'objet en s'assurant que toutes ses références sont effacées. Il est possible de faire cela en assignant null à la variable gérant l'objet. Si on ne le fait pas explicitement, PHP fermera automatiquement la connexion lorsque le script arrivera à la fin.

Note: S'il existe encore d'autres rĂ©fĂ©rences Ă  cette instance PDO (par exemple, Ă  partir d'une instance PDOStatement ou d'autres variables rĂ©fĂ©rençant la mĂȘme instance PDO), celles-ci doivent Ă©galement ĂȘtre supprimĂ©es (par exemple, en affectant null Ă  la variable qui rĂ©fĂ©rence le PDOStatement).

Exemple #3 Fermeture d'une connexion

<?php
$dbh
= new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// utiliser la connexion ici
$sth = $dbh->query('SELECT * FROM foo');

// et maintenant, on la ferme !
$sth = null;
$dbh = null;
?>

Beaucoup d'applications web utilisent des connexions persistantes aux serveurs de base de donnĂ©es. Les connexions persistantes ne sont pas fermĂ©es Ă  la fin du script, mais sont mises en cache et rĂ©utilisĂ©es lorsqu'un autre script demande une connexion en utilisant les mĂȘmes paramĂštres. Le cache des connexions persistantes permet d'Ă©viter d'Ă©tablir une nouvelle connexion Ă  chaque fois qu'un script doit accĂ©der Ă  une base de donnĂ©es, rendant l'application web plus rapide.

Exemple #4 Connexions persistantes

<?php
$dbh
= new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
?>

La valeur de l'option PDO::ATTR_PERSISTENT est convertie en booléen (activer/désactiver les connexions persistantes), sauf si c'est une chaßne de caractÚres non-numérique, auquel cas ceci autorise l'utilisation de plusieurs pools de connexions persistantes. Ceci est utile si les connexions différentes utilisent des paramÚtres incompatibles, par exemple, des valeurs différentes de PDO::MYSQL_ATTR_USE_BUFFERED_QUERY.

Note:

Pour utiliser des connexions persistantes, il faut utiliser la valeur PDO::ATTR_PERSISTENT dans le tableau des options du pilote passé au constructeur PDO. Si l'on définit cet attribut avec la méthode PDO::setAttribute() aprÚs l'instanciation de l'objet, le pilote n'utilisera pas les connexions persistantes.

Avertissement

PDO ne fait aucun nettoyage des connexions persistantes. Les tables temporaires, verrous, transactions et autres changements d'état peuvent rester de l'utilisation précédente de la connexion, causant des problÚmes inattendus. Voir la section Connexions de base de données persistantes pour plus d'informations.

Note:

Lors de l'utilisation du pilote PDO ODBC et que la bibliothĂšque ODBC prend en charge le bassin de connexion ODBC (unixODBC et Windows le supportent tous les deux ; peut ĂȘtre plus), alors il est recommandĂ© de ne pas utiliser les connexions persistantes PDO, mais plutĂŽt laisser le bassin de connexion ODBC mettre en cache les connexions. Le bassin de connexion ODBC est partagĂ© avec les autres modules dans le processus ; si PDO met en cache la connexion, alors cette connexion ne sera jamais retournĂ©e par le bassin de connexion ODBC, faisant que plusieurs connexions sont créées pour les autres modules.

add a note

User Contributed Notes

There are no user contributed notes for this page.