PDO::ERRMODE_SILENT
C'est le mode par défaut. PDO définira simplement le code d'erreur, qui peut être vérifié à l'aide des méthodes PDO::errorCode() et PDO::errorInfo() sur les instructions et les objets de base de données. Si l'erreur se produit en raison d'un appel à un objet d'instruction, vous pouvez appeler la méthode PDOStatement::errorCode() ou PDOStatement::errorInfo() de cet objet. Si l'erreur est provoquée par l'appel d'un objet de base de données, les deux méthodes ci-dessus peuvent être appelées sur l'objet de base de données.
PDO : ERRMODE_WARNING
En plus de définir le code d'erreur, PDO enverra également un message E_WARNING traditionnel. Ce paramètre est utile lors du débogage/test si vous souhaitez simplement voir ce qui ne va pas sans interrompre le flux de votre application.
PDO::ERRMODE_EXCEPTION
En plus de définir le code d'erreur, PDO lancera également une classe d'exception PDOException et définira ses propriétés pour refléter le code d'erreur et les informations d'erreur. Ce paramètre est également très utile lors du débogage, car il zoome efficacement sur le point du script où l'erreur s'est produite, ce qui vous permet d'identifier très rapidement les zones problématiques potentielles dans le code (rappelez-vous : si une exception entraîne la fin du script, le la transaction est automatiquement annulée).
Une autre chose très utile à propos du mode exception est que vous pouvez créer votre propre gestion des erreurs plus clairement que les avertissements de style PHP traditionnels, et cela nécessite moins de code que le mode silencieux et vérifie explicitement la valeur de retour de chaque appel de base de données /Less imbriqué.
<?php$dsn = 'mysql:dbname=testdb;host=127.0.0.1';$user = 'dbuser';$password = 'dbpass';try { $dbh = new PDO($dsn, $user, $password ); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} catch (PDOException $e) { echo 'Échec de la connexion : ' $e->getMessage();}?>.
Remarque : Que PDO::ATTR_ERRMODE soit actuellement défini ou non, PDO::__construct() lancera toujours une exception PDOException si la connexion échoue. Les exceptions non interceptées sont fatales.
<?php$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = 'googleguy';$password = 'googleguy';/* L'utilisation de try/catch autour du constructeur fonctionne toujours même si ERRMODE est défini AVERTISSEMENT car PDO::__construct lancera toujours une exception PDOException si la connexion échoue. */try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));} catch (PDOException $e) { echo 'Échec de la connexion : ' $. e->getMessage(); exit;}//Cela amènera PDO à lancer un E_WARNING erreur de niveau, plutôt qu'une exception (lorsque la table de données n'existe pas) $dbh->query("SELECT falsecolumn FROM incorrecttable");?>
La routine ci-dessus affichera :
Avertissement : PDO::query() : SQLSTATE[42S02] : Table de base ou vue introuvable : 1146 La table 'test.wrongtable' n'existe pas dans/tmp/pdo_test.php à la ligne 18ajouter une note ajouter une note