• 技术文章 >后端开发 >php教程

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

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


    以上就介绍了thinkphp 的事务回滚处理 和 原始PHP的事务回滚实例,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:mysql query dump res commit
    上一篇:php文件上传限制 下一篇:xml 知识点梳理 -- 整理自广州传智王老师
    PHP编程就业班

    相关文章推荐

    • 或者用到的php代码 • 求指导学习php思路,该怎么解决 • dede首页生成有关问题,附带一个特效有关问题 • 求共享dedecms二次开发视频• PHP提交数据到mysql很奇怪的问题??????????????????????

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网