1、开启事务方法 startTrans()
2、事务提交方法 commit()
3、事务回滚方法 rollback()

用法例子:

  1. $order = M(‘order’);
  2. $allAdded = true; //先设定一个值为 true;
  3. $data['name'] = 'winter';
  4. $order->startTrans(); //开启事物
  5. for($i = ;$i<;$i++){
  6. $sign = $order->add($data); //添加一条数据到order表
  7. if(!$sign){
  8. $order->rollback(); //如果order添加失败事物回滚
  9. $allAdded = false; //并且把allAdded设置为 false
  10. }
  11. }
  12. //回滚
  13. if($allAdded){
  14. $order->commit();
  15. // 如果allAdded为真则两条数据都成功;那么 commit事物提交
  16. echo '添加成功';
  17. }else{
  18. echo '添加失败';
  19. }

如果commit了。那么就提交插入数据。如果发现alladded为假说明有条数据没插入正确。那么就rollback回滚就会取消事物开启之后操作数据库的所有行为。

提供一个例子助于大家加深理解

  1. public function insertdata(){
  2. $model = M();
  3. $model->startTrans();
  4. $data['name'] = 'winter';
  5. //增加一条用户信息
  6. $si = $model->table(C('DB_PREFIX').'user')->add($data);
  7. if(!$si){
  8. $model->rollback();
  9. exit();
  10. }
  11. $car['brand'] = $si;
  12. //增加一条用户id
  13. $c = $model->table(C('DB_PREFIX').'car')->add($car);
  14. if($si && $c){
  15. $model->commit();
  16. }else{
  17. $model->rollback();
  18. }
  19. }
  20. 复制代码

例子二:

  1. //提现操作
  2. public function ajax_tx()
  3. {
  4. //判断是否登录
  5. if(session('uid') == NULL || session('uid') == "" || session('uid') == false) {
  6. echo "300";
  7. exit;
  8. }else{
  9. //接受提现提交来的数据
  10.  
  11. $txnumber = intval(trim($_POST['txnumber']));
  12.  
  13. $name = trim($_POST['name']);
  14. $alipay_number = trim($_POST['alipay_number']);
  15. $data = M("fanxian_new")->where("f_uid='".session('uid')."'")->find();
  16. if(empty($txnumber)){
  17. echo "301";exit;//提现金豆不能为空
  18. }else{
  19. if(empty($data) || intval($data['f_fan_fee'])==0){
  20. echo "302";exit;//无可提现金豆
  21. }else{
  22. if($data['f_fan_fee']<number_format($txnumber,2)){
  23. echo "303";exit;//提现金豆数请勿大于持有金豆数
  24. }else{
  25. if(empty($alipay_number)){
  26. echo "304";exit;//提现者支付宝账号不能为空
  27. }
  28. if(empty($name)){
  29. echo "305";exit;//提现者真实姓名不能为空
  30. }
  31.  
  32. $model=new \Think\Model();
  33. $model->startTrans(); //开启事物
  34. //操作提现记录
  35. $fanxian_new_log = M("fanxian_new_log");
  36. $fanxian_new_log->f_num_fee = number_format($txnumber,2);
  37. $fanxian_new_log->f_lmId = session("uid");
  38. $fanxian_new_log->f_create_time = time();
  39. $fanxian_new_log->f_name = $name;
  40. $fanxian_new_log->f_alipay = $alipay_number;
  41. $fanxian_new_log->f_status = 1;//1表示提现记录 0表示返现记录
  42. $jdtx = $fanxian_new_log->add();
  43.  
  44. $fanxian_new = M("fanxian_new");
  45. $fanxian_new->f_uid = $data['f_uid'];
  46. $fanxian_new->f_fan_fee = $data['f_fan_fee']-number_format($txnumber,2);
  47. $jd = $fanxian_new->save();
  48. if(!empty($jdtx) && !empty($jd)){
  49. //提交
  50. $model->commit();
  51. echo "200";exit;//提现成功
  52. }else{
  53. //回滚
  54. $model->rollback();
  55. echo "306";exit;//提现失败
  56. }
  57.  
  58. }
  59. }
  60. }
  61.  
  62. }
  63. }

ThinkPHP数据库驱动之mysql事物回滚的更多相关文章

  1. MySQL事物回滚

    #commit.rollback用来确保数据库有足够的剩余空间:#commi.rollback只能用于DML操作,即insert.update.delet;#rollback操作撤销上一个commit ...

  2. msql,触发器无事物回滚,插入之前满足条件再插入

    很少写mysql的触发器和存储过程,由于需要需要做一个很小的判断,要用到触发器,要达到的效果就是,插入之前判断是否满足条件如果不满足就不插入 如果用sqlserver 或者orcale 就很简单,按s ...

  3. 复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等

    使用配置文件properties进行连接数据库 首先创建一个file自定义文件名,但是后缀名必须改为.properties(不分大小写):如config.properties: 然后双击config. ...

  4. 解析php mysql 事务处理回滚操作

    论坛扣币项目中,用户支付论坛币的时候如果突然断网.电脑死机.停电.等其它自然灾害时,导致本次交易没有成功(即用户的币已经扣掉了,但是服务器数据库中没有消费记录等其它情况),这种情况应该怎么样进行处理呢 ...

  5. 浅析Mysql 数据回滚错误的解决方法

    介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下 MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollbac ...

  6. 解析php mysql 事务处理回滚操作(附实例)

    其实用PHP来处理mysql的事务回滚并不难,下面小编就详细的为大家介绍一下.相信大家看完之后都知道如何使用 很多新手在进行项目过程中,会碰到这样一种情况,如:论坛扣币项目中,用户支付论坛币的时候如果 ...

  7. 浅析Mysql数据回滚错误的解决方法

    介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下   MYSQL的事务处理主要有两种方法.   1.用begin,rollback,commit来实现   begin 开始一个事 ...

  8. C#里面的事物回滚,解决同步数据插入时出现重复数据

    什么是事物回滚: 举个栗子,你在你家的银行分行取钱,取完钱数据要同步,而且可能每个分行都有一个存储这些数据的数据库,分行的这些 存取的记录都需要实时同步,如果你取完500刚好断电了,好嘛,分行可能刚记 ...

  9. Spring-Java事物回滚失效处理

    spring-Java事物回滚失效处理最近在做项目中,无意间发现有个类在抛事物回滚操作,数据也正常的插入到数据库当中了,于是仔细查看看一下具体原因. 一切还是要从Java的检查型异常和非检查型异常说起 ...

随机推荐

  1. weblogic的linux静默搭建

    前言: Weblogic与Tomcat都是java应用的容器,而这两者有什么大的不同呢?Tomcat是Apache基金会提供的Servlet容器,它支持JSP, Servlet和JDBC等J2EE关键 ...

  2. Java 学习之路让我帮助很大的书籍

    笔主目前从事Java工作已经5年,满打满算下来,从大二上学期接触 Java 到现在也快走过了 7 个年头.在学习 Java 过程中,网上的一些视频还有一些书籍对我帮助都很大.下面就我自己看过的一些书籍 ...

  3. 3.java基础之关键字instanceof

    1. instanceof 使用:对象引用名 instanceof 类名 作用:来判读引用的对象和类名是否兼容(是否继承该类,或爷爷辈的类) 例子: Team team = new Team(); t ...

  4. Vultr主机绑定域名

    1.在腾讯云上注册域名 然后,域名实名认证 2.Vultr主机购买(看我之前写的:手把手教你如何自己搭梯子) 然后会获取到一个服务器IP地址 3.绑定域名与IP 点解,解析后会弹出让你输入IP地址,此 ...

  5. 控制台提示“Invalid string length”的原因

    控制台提示“Invalid string length”,浏览器直接卡掉,是为什么呢? 答:因为在写嵌套循环时,定义的变量重名了,内层和外层用了同一个i变量. -THE END-

  6. 《收获,不止SQL优化》这本书,有很多即用的脚本工具,或者根据自己的需求,改造重用,可以积累到自己的工具库中。

    以下两个脚本,官方来源: https://github.com/liangjingbin99/shouhuo/tree/master/%E7%AC%AC05%E7%AB%A0 1. 找出未使用绑定变量 ...

  7. Java基础 - volatile

    volatile的作用:对与volatile修饰的变量, 1,保证该变量对所有线程的可见性. 2,禁止指令重排序. Java内存模型(JMM) 原子性 i = 2; 把i加载到工作内存副本i,副本i= ...

  8. 推荐系统| ② 离线推荐&基于隐语义模型的协同过滤推荐

    一.离线推荐服务 离线推荐服务是综合用户所有的历史数据,利用设定的离线统计算法和离线推荐算法周期性的进行结果统计与保存,计算的结果在一定时间周期内是固定不变的,变更的频率取决于算法调度的频率. 离线推 ...

  9. 「专题总结」LCT 2

    差不多理解板子之后,写了一些奇怪的题. 但是还是那个问题:树剖真好使. 魔法森林:mikufun说这个是傻逼题. 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐士. 魔法森林可以 ...

  10. 【游戏开发】网络编程之浅谈TCP粘包、拆包问题及其解决方案

    引子 现如今手游开发中网络编程是必不可少的重要一环,如果使用的是TCP协议的话,那么不可避免的就会遇见TCP粘包和拆包的问题,马三觉得haifeiWu博主的 TCP 粘包问题浅析及其解决方案 这篇博客 ...