事务可以被视为原子操作,原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分,将整个操作视作一个整体是原子性的核心特征。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: 抛出异常

发表评论

邮箱地址不会被公开。 必填项已用*标注