PDO中事物详解
来源:互联网 发布:蝴蝶战法指标公式源码 编辑:程序博客网 时间:2024/05/22 00:48
PDO中事物与其他编程语言类似,采用开始事物,提交事物,回滚的流程模式,但是在使用mysql作为插入或者修改的数据库时需要注意,需要将MySQL中的表的引擎设置为Innodb模式,MySQL中表有两种模式,一种是myisam模式,一种是Innodb模式。简单地说,前者不支持事物,后者支持事物。所以在PDO的事务处理中,前者类型的表不支持事务,即便在代码中写了相应的事务处理代码。所以需要对表引擎设置成Innodb模式。
实例:
表中数据
mysql> select * from bank;
+----+-------+------+
| id | name | sum |
+----+-------+------+
| 1 | wang | 1500 |
| 2 | zhang | 1500 |
+----+-------+------+
2 rows in set (0.00 sec)
对一个表中的两条记录更新。(此时表为默认的MyIsam模式)
$pdo=new PDO('mysql:host=localhost;dbname=myphp','root','123456');$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false);try { $pdo->beginTransaction();//开始事物 $sql1='update bank set Sum=Sum-500 where id=2'; $sql2='update bank set Sum=Sum+500 where id=5';//注意此处对id=5的数据操作,但并不存在id=5的数据 $res1=$pdo->exec($sql1); if($res1==0) { throw new PDOException('Error in zhang'); } $res2=$pdo->exec($sql2); if($res2==0) { throw new PDOException('Error in wang'); } $pdo->commit();//提交事物}catch (PDOException $e){ $pdo->rollBack(); echo $e->getMessage();}
执行结果:
mysql> select * from bank;
+----+-------+------+
| id | name | sum |
+----+-------+------+
| 1 | wang | 1500 |
| 2 | zhang | 1000 |
+----+-------+------+
2 rows in set (0.00 sec)
由此可见,表不支持事务,即使在PDO中做了相关事务的限制也无济于事。
下面需要把表的引擎模式改成Innodb:
alter table bank engine=Innodb;
下面是新的执行结果:
mysql> select * from bank;
+----+-------+------+
| id | name | sum |
+----+-------+------+
| 1 | wang | 1500 |
| 2 | zhang | 1500 |
+----+-------+------+
2 rows in set (0.00 sec)
这次执行后,表中的额数据都没有发生变化,说明还是PDO中事物在mysql中起作用还要设置表的引擎模式。
- PDO中事物详解
- PDO中事物处理
- PDO中事物处理
- pdo事物
- PDO事物处理
- pdo事物回滚
- pdo事物回滚
- pdo 创建事物处理
- pdo-事物处理
- pdo的事物处理
- PDO链接数据库,PDO事物处理
- PHP中PDO连接进行事物回滚及try{}catch(){}
- PHP中PDO连接进行事物回滚及try{}catch(){}
- PDO详解
- PDO详解
- 事物详解
- PDO的安全处理与事物处理
- CI框架PDO事物回滚
- java线程中yield(),sleep(),wait()区别详解
- 题目1203:IP地址
- BigDecimal使用方式
- (4.5.5.4)Espresso的进阶: OnView & onData & Matchers
- android去掉振动相关选项
- PDO中事物详解
- fragment入门
- cin和scanf
- 关于function(e)中的e
- jquery获取图片的宽度
- c_简单的文件加解密
- 题目1204:农夫、羊、菜和狼的故事
- C++输入输出流格式控制
- 【IMWeb训练营作业】【Vue】Select组件