# 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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open