php中的PDO事务处理
事务可以被视为原子操作,原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分,将整个操作视作一个整体是原子性的核心特征。mysql MyISAM引擎(表类型)不支持事务,如果要支持事务的话,则考虑InnoDB或BDB存储引擎(日常中一般都是选InnoDB较多)。
config.php
<?php define("DBHOST","localhost"); define("USER","root"); define("PWD","root"); define("DBNAME","chaoshi"); define("DBTYPE","mysql"); define("DBDSN",DBTYPE.":host=".DBHOST.";dbname=".DBNAME); ?> |
20.php
<?php //PDO中的事务处理 require("config.php"); //引入数据库配置文件 try{ $pdo=new PDO(DBDSN,USER,PWD); $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false); //关闭自动提交 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //出现错误抛出异常 $pdo->beginTransaction(); //开启事物 $sql="UPDATE jifen SET credit=credit-10 WHERE name='张三'"; $rel1=$pdo->exec($sql); if($rel1==0){ throw new PDOException("张三扣除积分失败"); } $rel2=$pdo->exec("UPDATE jifen SET credit=credit+10 WHERE name='李四'"); if($rel2==0){ throw new PDOException("张三添加积分失败"); } $pdo->commit(); //提交事物 echo "采纳成功<br>"; $query="select credit from jifen where name='张三'"; $result=$pdo->prepare($query); $result->execute(); $row=$result->fetchColumn(); echo "张三当前积分".$row."<br>"; $query2="select credit from jifen where name='李四'"; $result2=$pdo->prepare($query2); $result2->execute(); $row2=$result2->fetchColumn(); echo "李四当前积分".$row2; } catch(PDOException $e){ $pdo->rollBack(); //事物回滚 echo $e->getMessage(); } |
PDO中捕获sql语句中的错误的几种模式
PDO::ATTR_ERRMODE: 错误提示 .
PDO::ERRMODE_SILENT: 不显示错误信息,只显示错误码 . 默认是这种
PDO::ERRMODE_WARNING: 显示警告错误 .
PDO::ERRMODE_EXCEPTION: 抛出异常