Utiliser le mode d'exception -PDO::ERRMODE_EXCEPTION (méthode 3 de capture des erreurs dans les instructions SQL dans PDO)
Le mode d'exception créera une PDOException et définira l'attribut erorCode, qui peut le code d'exécution est encapsulé dans une instruction try{...}catch{...}. Les exceptions non interceptées entraîneront l'interruption du script et une trace de pile sera affichée pour permettre à l'utilisateur de comprendre où le problème s'est produit !
Dans les deux premiers articles "Utilisez le mode par défaut-PDO::ERRMODE_SILENT (Méthode 1 pour capturer les erreurs dans les instructions SQL dans PDO)" "Utilisez le mode d'avertissement-PDO :: ERRMODE_WARNING (Méthode 2 pour capturer les erreurs dans les instructions SQL dans PDO) " Nous avons introduit deux méthodes, le mode par défaut et le mode exception, nous allons donc aujourd'hui introduire la troisième méthode pour capturer les erreurs dans les instructions SQL dans PDO~
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 par rapport au mode silencieux et en vérifiant explicitement la valeur de retour de chaque appel de base de données, les modèles d'exceptions nécessitent moins de code. /nidification.
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 se produit, permettant d'identifier très rapidement les zones potentielles problématiques du code ! (Rappelez-vous : si une exception entraîne la fin du script, la transaction est automatiquement annulée).
Lorsque vous effectuez l'opération de suppression de données dans la base de données, définissez-la en mode d'exception et écrivez une instruction SQL incorrecte pour comprendre la différence entre le mode d'exception, le mode d'avertissement et le mode par défaut.
Les étapes spécifiques sont les suivantes :
(1) Créez un fichier php, connectez-vous à la base de données, exécutez l'opération de requête SELECT via les méthodes préparer() et exécuter() de l'opération planifiée. traitement, et utilisez l'instruction while et fetch La méthode () termine la sortie en boucle des données et définit le lien hypertexte de suppression pour se connecter à un autre fichier php. Le paramètre transmis est la valeur ID des données. Le code est le suivant :
<?php header("Content-Type:text/html; charset=utf-8"); //设置页面的编码格式 $dbms = "mysql"; // 数据库的类型 $dbName ="php_cn"; //使用的数据库名称 $user = "root"; //使用的数据库用户名 $pwd = "root"; //使用的数据库密码 $host = "localhost"; //使用的主机名称 $dsn = "$dbms:host=$host;dbname=$dbName"; try{ $pdo=new PDO($dsn,$user,$pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //设置为警告模式 $query="select * from user";//需要执行的sql语句 $res=$pdo->prepare($query);//准备查询语句 $res->execute(); //执行查询语句,并返回结果集 ?> <table border="1" width="500"> <tr> <td height="22" align="center" valign="middle">id</td> <td height="22" align="center" valign="middle">用户名</td> <td height="22" align="center" valign="middle">密码</td> <td height="22" align="center" valign="middle">操作</td> </tr> <?php while($result=$res->fetch(PDO::FETCH_ASSOC)){ // 循环输出查询结果集,并且设置结果集为关联数据形式。 ?> <tr> <td height="22" align="center" valign="middle"><?php echo $result["id"];?></td> <td height="22" align="center" valign="middle"><?php echo $result["username"];?></td> <td height="22" align="center" valign="middle"><?php echo $result["password"];?></td> <td height="22" align="center" valign="middle"><a href="2.php?code_id=<?php echo $result['id'];?>">删除</td> </tr> <?php } }catch(Exception $e){ die("Error!:".$e->getMessage().'<br>'); } ?> </table>
Les résultats de sortie sont les suivants :
(2) Créez un autre fichier, obtenez la valeur d'ID de données du lien hypertexte, connectez-vous au base de données, définissez-la en mode exception via la méthode setAttribute(), définissez l'instruction DELETE et supprimez une donnée incorrecte dans la table de données, et les informations d'erreur sont obtenues via l'instruction try{...}catch{...} . Le code spécifique est le suivant :
<?php $id = $_GET['code_id']; if($id){ header("Content-Type:text/html; charset=utf-8"); //设置页面的编码格式 $dbms = "mysql"; // 数据库的类型 $dbName ="php_cn"; //使用的数据库名称 $user = "root"; //使用的数据库用户名 $pwd = "root"; //使用的数据库密码 $host = "localhost"; //使用的主机名称 $dsn = "$dbms:host=$host;dbname=$dbName"; try{ $pdo=new PDO($dsn,$user,$pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //设置为警告模式 $query="delete * from user_12 where id = $id";//需要执行的sql语句 $res=$pdo->prepare($query);//准备查询语句 $res ->bindParam(':id',$_GET['code_id']); //绑定更新数据 $res->execute(); //执行查询语句,并返回结果集 }catch (PDOException $e){ echo "PDO Exception Caught"; echo 'Error with the database:<br>'; echo 'SQL Query;'.$query; echo '<pre class="brush:php;toolbar:false">'; echo "Error:".$e -> getMessage()."<br>"; echo "Code:".$e ->getCode()."<br>"; echo "File:".$e ->getFile()."<br>"; echo "Line:".$e ->getLine()."<br>"; echo "Trace:".$e ->getTraceAsString()."<br>"; echo "
Remarque :
Dans le code ci-dessus, lors de la définition. l'instruction de suppression DELETE, nous avons délibérément utilisé le mauvais nom de table de données user_12 (le nom correct de la table de données est : user ), ceci est écrit à des fins de test !
Après le passage en mode exception, la mauvaise instruction SQL est exécutée et le résultat de sortie est le suivant :
À propos de la capture Instructions SQL dans PDO Nous avons fini de présenter ici les trois méthodes de gestion des erreurs. Je pense que tout le monde a une certaine compréhension des erreurs lors de la capture des instructions SQL dans PDO. Dans le prochain article, nous continuerons à vous présenter les méthodes de gestion des erreurs dans PDO. PDO. Pour plus de détails, veuillez lire « Méthode 1 de gestion des erreurs dans PDO - méthode errorCode() 》 !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!