php回滚实例_thinkphp 的事务回滚处理 和 原始PHP的事务回滚实例

1.  要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql

为例:

数据库InnoDB支持 transactions

a4c26d1e5885305701be709a3d33442f.png

数据表支持事务:InnoDB  支持transaction

a4c26d1e5885305701be709a3d33442f.png

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');

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值