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 事务原理的深度说明文章

浙公网安备 33010602011771号