欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

thinkphp 的事宜回滚处理 和 原始PHP的事务回滚实例

程序员文章站 2022-05-05 10:40:26
...
thinkphp 的事务回滚处理 和 原始PHP的事务回滚实例

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

数据库InnoDB支持 transactions

thinkphp 的事宜回滚处理  和 原始PHP的事务回滚实例

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

thinkphp 的事宜回滚处理  和 原始PHP的事务回滚实例

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 对事务的处理比较简单,涉及到业务中多个数据操作,就可以考虑用事务处理

thinkphp 的事宜回滚处理  和 原始PHP的事务回滚实例

thinkphp 的事宜回滚处理  和 原始PHP的事务回滚实例

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • thinkphp 的事宜回滚处理  和 原始PHP的事务回滚实例
  • 专题推荐

    作者信息
    thinkphp 的事宜回滚处理  和 原始PHP的事务回滚实例

    认证0级讲师

    推荐视频教程
  • thinkphp 的事宜回滚处理  和 原始PHP的事务回滚实例javascript初级视频教程
  • thinkphp 的事宜回滚处理  和 原始PHP的事务回滚实例jquery 基础视频教程
  • 视频教程分类