thinkphp 的事务回滚处理 和 原始php的事务回滚实例,thinkphp实例1. 要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql 为例:
数据库innodb支持 transactions
数据表支持事务:innodb 支持transaction
2. 框架thinkphp 支持事务代码
public function testrollback(){$model1 = d('item');$model2 = d('vote');$model1->starttrans();$res1 = $model1->where('id = 5')->delete();$res2 = $model2->where('id = 2')->delete();dump($res1);dump($res2);if($res1 && $res2){$model1->commit(); //只有$res1 和 $res2 都执行成功是才真正执行上面的数据库操作dump(commit);}else{$model1->rollback(); // 条件不满足,回滚dump(rollback);}dump(over);exit;}
3. 原始php 代码事务实例
方法一:只支持数据库和数据表都是 innodb 的情况
public function rollbackoriginal1(){ $conn = mysql_connect('127.0.0.1','summerzi','summerzi') or die('db connection failed!'); mysql_select_db('summer',$conn); mysql_query('set names gbk'); mysql_query('begin'); $sql1 = insert into `summer_userdata`(`uid`,`type`,`target_id`) values(41,1,233);; $sql2 = insert into `summer_userdata`(`uid`,`type`,`target_id`) values(fdfd,2,235);; $res1 = mysql_query($sql1); $res2 = mysql_query($sql2); dump($sql1); dump($sql2); dump($res1); dump($res2); if($res1 && $res2){ mysql_query('commit'); dump('commit success!'); }else{ mysql_query('rollback'); dump('commit failed, rollback!'); } mysql_query('end'); }
方法二:(注意:对于不支持事务的myisam引擎数据库可以使用表锁定的方法)
public function rollbackoriginal2(){ $conn = mysql_connect('127.0.0.1','summerzi','summerzi') or die('db connection failed!'); mysql_select_db('summer',$conn); mysql_query('set names gbk'); mysql_query('set autocommit=0');////设置mysql不自动提交,需自行用commit语句提交 $sql1 = insert into `summer_userdata`(`uid`,`type`,`target_id`) values(41,1,233);; $sql2 = insert into `summer_userdata`(`uid`,`type`,`target_id`) values(44,2,235);; //mysql_query(lock tables `hmbl_userdata` write);//锁定表 $res1 = mysql_query($sql1); $res2 = mysql_query($sql2); dump($sql1); dump($sql2); dump($res1); dump($res2); //mysql_query(unlock tables);//解除锁定 if($res1 && $res2){ mysql_query('commit'); dump('commit success!'); }else{ mysql_query('rollback'); dump('commit failed, rollback!'); } mysql_query(set autocommit=1); mysql_query('end'); }
php + mysql 对事务的处理比较简单,涉及到业务中多个数据操作,就可以考虑用事务处理
http://www.bkjia.com/phpjc/979001.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/979001.htmltecharticlethinkphp 的事务回滚处理 和 原始php的事务回滚实例,thinkphp实例 1. 要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql 为例...