Traiter les exceptions PDO

Noter ce cours :

Liens sponsorisés :

PDO est une couche d'abstraction permettant d'accéder à de nombreuses bases de données depuis PHP. Elle remplace les antédiluviennes fonctions mysql_(), pgsql_() etc. Utiliser PDO offre de meilleures performances et fonctionnalités. De plus, c'est la seule méthode valable qui sera intégrée nativement dans les futures versions de PHP.

PDO génère des erreurs appelées exceptions. Une exception est un message que l'on peut lancer puis attraper, et en faire ensuite ce que l'on veut, comme dans tout langage de programmation qui se respecte.

Ces exceptions sont bien souvent mal rédigées, et il est difficile de s'y retrouver, c'est pourquoi j'ai essayé de lister l'ensemble des erreurs que vous pourrez trouver avec PDO ici. Elles commencent toutes par PDOException.

Installer PDO

Dans les versions supérieures ou égales à la 5.3 de PHP, PDO est intégré nativement. Vous n'aurez plus besoin de faire ces fastidieuses manipulations.

Sous Linux

Sous Linux, prenons le cas de Debian, vous devrez exécuter les commandes suivantes : apt-get install pdo.

~# apt-get install pdo

Ouvrez ensuite le fichier php.ini (situé généralement dans le répertoire /etc/php5/apache2/php.ini) puis ajoutez la ligne extension=pdo.so. CTRL+X et ensuite appuyez sur la touche Y (ou O en français) pour sauvegarder.

~# nano /etc/php5/apache2/php.ini

Pour installer ensuite les différents drivers PDO, vous pourrez utiliser la commande suivante (Exemple pour MySQL) : apt-get install pdo_mysql.

~# apt-get install pdo_mysql

Relancez ensuite Apache : /etc/init.d/apache2 restart.

~# /etc/init.d/apache2 restart

Sous Windows

Avec un utilitaire tel que WAMP, PDO est déjà inclus dans les dernières versions de PHP. Vous n'avez plus qu'à activer le ou les drivers dont vous avez besoin (voir plus bas). Si vous ne disposez pas d'un tel utilitaire, vous devrez décommenter dans le php.ini la ligne ;extension=php_pdo.dll.

Could not find driver

Cette erreur se produit lorsque vous tentez de vous connecter à une base dont le type est encore inconnu par PDO. Cela signifie que le driver nécessaire n'est pas installé, et que PDO ne peut donc pas contrôler ce type de base.

Pour résoudre ce problème, vous devez installer puis activer les extensions manquantes dans le fichier php.ini :

Could not find driver
Could not find driver

Sous Windows, repérez les différentes lignes ;extension=php_pdo_X.dll et enlevez le point-virgule se trouvant devant pour les décommenter, et relancez votre serveur Apache.

Sous Linux, repérez les différentes lignes extension=pdo_X.so et enlevez le point-

SQLSTATE[HY000] [1045] Access denied for user ...

Cette erreur survient lorsque le login ou/et le mot de passe utilisés pour vous connecter au serveur sont faux. Exemple de code utilisé pour se connecter à une base MySQL nommée test, sur le serveur localhost, avec PDO :

<?php
    $db = new PDO('mysql:host=localhost;dbname=test''login''passe');
?>

Dans le cas où l'utilisateur login n'existe pas, ou alors si son mot de passe est différent de passe, le code ci-dessus ne fonctionnera pas et renverra une Exception PDOException.

Erreur d'authentification PDO
Access denied for user ...@...

Pour corriger cette erreur, vous devez indiquer un hôte, un login et un mot de passe valides.

SQLSTATE[HY000] [1049] Unknown database ...

Cette erreur survient lorsque la base de données à laquelle vous tentez de vous connecter n'existe pas. Prenons l'exemple suivant où je tente de me connecter à une base MySQL avec PDO. Cette base mabasequinexistepas n'existe pas (comme son nom l'indique).

<?php
    $db = new PDO('mysql:host=localhost;dbname=mabasequinexistepas''root''');
?>

L'erreur renvoyée sous forme d'exception par PDO sera la suivante :

Base de données inexistante PDO
Unknown database 'mabasequinexistepas'
Vous avez aimé cet article intitulé Traiter les exceptions PDO ? Partagez-le !
Vulgarisation-informatique.com
Cours en informatique & tutoriels