erreur PHP PDO avec la gestion des erreurs
- PDO :: ERRMODE_SILENT
Ceci est le mode par défaut. PDO définit simplement le code d'erreur, utilisez le PDO :: errorCode () et la méthode PDO :: errorInfo () pour vérifier les objets des états et base de données. Si l'erreur est due à l'objet de la déclaration d'appel est généré, vous pouvez appeler cet objet PDOStatement :: errorCode () ou la méthode PDOStatement :: errorInfo (). Si l'erreur résulte d'un appel sur l'objet de base de données, puis invoquer ces méthodes sur l'objet de base de données.
- PDO :: ERRMODE_WARNING
En plus de définir l'ajout de code d'erreur, PDO émettra un message E_WARNING traditionnel. Si vous voulez juste pour voir quels problèmes a eu lieu sans interrompre le flux de l'application, de sorte que ce paramètre dans la période de débogage / de test est très utile.
- PDO :: ERRMODE_EXCEPTION
En plus de définir l'ajout de code d'erreur, PDO lancera une classe PDOException d'exception et définir ses propriétés pour refléter les messages de code d'erreur et d'erreur. Ce paramètre est également utile pendant le débogage, car un mauvais point, il sera effectivement agrandir le script, qui peut très rapidement souligner le potentiel indicatif régional problème (rappelez-vous: si l'exception provoque le script de mettre fin à la transaction est automatiquement rouleau).
Un autre mode d'exception est très utile, par rapport aux avertissements traditionnels PHP-style, vous pouvez construire votre propre erreur de manipulation plus clairement, et la valeur de retour de l'appel de chaque base de données, le code de configuration anormale requis par rapport au mode silencieux et de vérifier explicitement / nichant moins.
Créer une instance PDO et régler le mode d'erreur
<?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 'Connection failed: ' . $e->getMessage(); } ?>
Remarque: Indépendamment du fait que le jeu actuel PDO :: ATTR_ERRMODE, si la connexion échoue, PDO :: __ construct () sera toujours une exception de PDOException. Uncaught exception est fatale.
Créer une instance PDO et régler le mode d'erreur dans le constructeur
<?php $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'googleguy'; $password = 'googleguy'; /* 使用 try/catch 围绕构造函数仍然有效,即使设置了 ERRMODE 为 WARNING, 因为如果连接失败,PDO::__construct 将总是抛出一个 PDOException 异常。 */ try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit; } // 这里将导致 PDO 抛出一个 E_WARNING 级别的错误,而不是 一个异常 (当数据表不存在时) $dbh->query("SELECT wrongcolumn FROM wrongtable"); ?>
La sortie par exemple de volonté ci-dessus:
Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in /tmp/pdo_test.php on line 18 add a note add a note