Use exception mode -PDO::ERRMODE_EXCEPTION (Method 3 for capturing errors in SQL statements in PDO)
Exception mode will create a PDOException and set the erorCode attribute, which can The execution code is encapsulated into a try{...}catch{...} statement. Uncaught exceptions will cause the script to interrupt, and a stack trace will be displayed to let the user understand where the problem occurred!
In the first two articles "Use the default mode-PDO::ERRMODE_SILENT (Method 1 to capture errors in SQL statements in PDO)" "Use the warning mode-PDO:: ERRMODE_WARNING (Method 2 for capturing errors in SQL statements in PDO)》We introduced two methods, the default mode and the exception mode, so today we will introduce the third method to capture errors in SQL statements in PDO~
Another very useful thing about exception mode is that you can build your own error handling more clearly than traditional PHP-style warnings, and compared to silent mode and explicitly checking the return value of each database call, exceptions Patterns require less code/nesting.
In addition to setting the error code, PDO will also throw a PDOException exception class and set its properties to reflect the error code and error information. This setting is also very useful during debugging as it effectively zooms in on the point in the script where the error occurs, making it possible to pinpoint problematic potential areas of the code very quickly! (Remember: if an exception causes the script to terminate, the transaction is automatically rolled back).
When performing the deletion operation of data in the database, set it to exception mode and write an incorrect SQL statement to understand the difference between exception mode, warning mode and default mode.
The specific steps are as follows:
(1) Create a php file, connect to the database, execute the SELECT query operation through the prepare() and execute() methods of the scheduled processing statement, and use the while statement and fetch The () method completes the loop output of data, and sets the delete hyperlink to connect to another php file. The parameter passed is the ID value of the data. The code is as follows:
<?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>
The output result is as follows:
(2) Create another file, obtain the data ID value of the hyperlink, connect to the database, set it to exception mode through the setAttribute() method, define a DELETE statement, and delete an error data in the data table, and obtain error information through the try{...}catch{...} statement. The specific code is as follows:
<?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 "
Note:
In the above code, when defining the DELETE delete statement, we deliberately used the wrong data table name user_12 (the correct data table name is: user), here is Written for testing!
After setting to exception mode, execute the wrong SQL statement, the output result is as follows:
About capturing SQL statements in PDO We have finished introducing the three methods of error handling here. I believe that everyone has a certain understanding of errors in capturing SQL statements in PDO. In the next article, we will continue to introduce to you the error handling methods in PDO. For details, please read " Error handling method 1 in PDO-errorCode() method》!
The above is the detailed content of Use exception mode-PDO::ERRMODE_EXCEPTION (method three to capture errors in SQL statements in PDO). For more information, please follow other related articles on the PHP Chinese website!