6.2 PDO 处理事务

一 什么是事务

事务把多条SQL语句当成一个整体来处理,事务中所有SQL全部执行成功,事务才会提交,否则回滚到最原始的状态。注意:MySQL的innodb引擎才支持事务

事务支持四大特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability)。

二 事务的基本原理

普通的执行,之所以是立即执行并生效,因为默认的,MySQL对sql语句的执行是自动提交的!所以,开启一个事务的本质,就是关闭了以前的自动提交的功能,而是由用户手动提交(利用commit语句)!

三 总结事务的步骤:

1 开启事务 beginTransaction

2 如果执行成功,就提交commit

3 如果有任何一条sql语句执行失败,则回滚rollback!

四 代码实现

1 连接数据库

$dsn = 'mysql:host=localhost;dbname=yunucms;charset=utf8';
try {
    //1 创建实例
    $pdo = new PDO($dsn,'root','root');
    //2 设置错误模式为异常类型
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  //设置默认的结果集提取模式为索引数组
  $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_NUM);
} c

2 执行事务

try {
    //1 开启事务
    $pdo->beginTransaction();
    //2 执行第一条SQL
    $sql = 'update yunu_diy_article set ftitle = 500 where conid=33';
    $res = $pdo->exec($sql);
    if ($res>0){
        echo '第一条SQL执行成功';
    } else {
        throw new PDOException('第一条SQL执行失败');
    }
    //3 执行第二条SQL
    $sql = 'update yunu_diy_article se0t ftitle = 1000 where conid=34';
    $res = $pdo->exec($sql);
    if ($res>0){
        echo '第二条SQL执行成功';
    } else {
        throw new PDOException('第二条SQL执行失败');
    }
    $pdo->commit();  //4 提交事务
    echo '执行成功';
} catch (PDOException $e) {
    $pdo->rollBack(); //5 回滚设置
    echo $e->getMessage();
}

 https://www.cnblogs.com/wyc1994666/p/11367051.html  事务原理的深度说明文章

posted @ 2020-12-24 21:20  棉花糖88  阅读(86)  评论(0)    收藏  举报