1 <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
2 <?php
3 $conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
4 mysql_select_db('test',$conn);
5 //开始一个事务
6 mysql_query("BEGIN"); //或者mysql_query("START TRANSACTION");
7 try{
8 $sql = "INSERT INTO `test` (`id`, `num`) VALUES (NULL, 1)";
9 $sql2 = "INSERT INTO `test` (`did`, `num`) VALUES (NULL,2)";//这条我故意写错
10 $res = mysql_query($sql);
11 $res1 = mysql_query($sql2);
12 $sql3="update test set num=1 where 1>2 and id=1000000";
13 $res3=mysql_query($sql3);
14 //if($res && $res1){
15 if($res3){
16 mysql_query("COMMIT");
17 echo '提交成功。';
18 }else{
19 mysql_query("ROLLBACK");
20 throw new Exception("数据回滚。");
21 }
22 }catch(Exception $e){
23 //捕获异常
24 echo 'Message: ' .$e->getMessage();
25 }
26 mysql_query("END");
https://www.w3school.com.cn/php/php_exception.asp
创建一个自定义的 Exception 类
创建自定义的异常处理程序非常简单。我们简单地创建了一个专门的类,当 PHP 中发生异常时,可调用其函数。该类必须是 exception 类的一个扩展。
这个自定义的 exception 类继承了 PHP 的 exception 类的所有属性,您可向其添加自定义的函数。
我们开始创建 exception 类:
<?php class customException extends Exception { public function errorMessage() { //error message $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address'; return $errorMsg; } } $email = "someone@example...com"; try { //check if if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { //throw exception if email is not valid throw new customException($email); } } catch (customException $e) { //display custom message echo $e->errorMessage(); } ?>
这个新的类是旧的 exception 类的副本,外加 errorMessage() 函数。正因为它是旧类的副本,因此它从旧类继承了属性和方法,我们可以使用 exception 类的方法,比如 getLine() 、 getFile() 以及 getMessage()。
例子解释:
上面的代码抛出了一个异常,并通过一个自定义的 exception 类来捕获它:
- customException() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。
- 创建 errorMessage() 函数。如果 e-mail 地址不合法,则该函数返回一条错误消息
- 把 $email 变量设置为不合法的 e-mail 地址字符串
- 执行 "try" 代码块,由于 e-mail 地址不合法,因此抛出一个异常
- "catch" 代码块捕获异常,并显示错误消息