ThinkPHP数据库驱动之mysql事物回滚
1、开启事务方法 startTrans()
2、事务提交方法 commit()
3、事务回滚方法 rollback()
用法例子:
$order = M(‘order’);
$allAdded = true; //先设定一个值为 true;
$data['name'] = 'winter';
$order->startTrans(); //开启事物
for($i = ;$i<;$i++){
$sign = $order->add($data); //添加一条数据到order表
if(!$sign){
$order->rollback(); //如果order添加失败事物回滚
$allAdded = false; //并且把allAdded设置为 false
}
}
//回滚
if($allAdded){
$order->commit();
// 如果allAdded为真则两条数据都成功;那么 commit事物提交
echo '添加成功';
}else{
echo '添加失败';
}
如果commit了。那么就提交插入数据。如果发现alladded为假说明有条数据没插入正确。那么就rollback回滚就会取消事物开启之后操作数据库的所有行为。
提供一个例子助于大家加深理解
public function insertdata(){
$model = M();
$model->startTrans();
$data['name'] = 'winter';
//增加一条用户信息
$si = $model->table(C('DB_PREFIX').'user')->add($data);
if(!$si){
$model->rollback();
exit();
}
$car['brand'] = $si;
//增加一条用户id
$c = $model->table(C('DB_PREFIX').'car')->add($car);
if($si && $c){
$model->commit();
}else{
$model->rollback();
}
}
复制代码
例子二:
//提现操作
public function ajax_tx()
{
//判断是否登录
if(session('uid') == NULL || session('uid') == "" || session('uid') == false) {
echo "300";
exit;
}else{
//接受提现提交来的数据 $txnumber = intval(trim($_POST['txnumber'])); $name = trim($_POST['name']);
$alipay_number = trim($_POST['alipay_number']);
$data = M("fanxian_new")->where("f_uid='".session('uid')."'")->find();
if(empty($txnumber)){
echo "301";exit;//提现金豆不能为空
}else{
if(empty($data) || intval($data['f_fan_fee'])==0){
echo "302";exit;//无可提现金豆
}else{
if($data['f_fan_fee']<number_format($txnumber,2)){
echo "303";exit;//提现金豆数请勿大于持有金豆数
}else{
if(empty($alipay_number)){
echo "304";exit;//提现者支付宝账号不能为空
}
if(empty($name)){
echo "305";exit;//提现者真实姓名不能为空
} $model=new \Think\Model();
$model->startTrans(); //开启事物
//操作提现记录
$fanxian_new_log = M("fanxian_new_log");
$fanxian_new_log->f_num_fee = number_format($txnumber,2);
$fanxian_new_log->f_lmId = session("uid");
$fanxian_new_log->f_create_time = time();
$fanxian_new_log->f_name = $name;
$fanxian_new_log->f_alipay = $alipay_number;
$fanxian_new_log->f_status = 1;//1表示提现记录 0表示返现记录
$jdtx = $fanxian_new_log->add(); $fanxian_new = M("fanxian_new");
$fanxian_new->f_uid = $data['f_uid'];
$fanxian_new->f_fan_fee = $data['f_fan_fee']-number_format($txnumber,2);
$jd = $fanxian_new->save();
if(!empty($jdtx) && !empty($jd)){
//提交
$model->commit();
echo "200";exit;//提现成功
}else{
//回滚
$model->rollback();
echo "306";exit;//提现失败
} }
}
} }
}
ThinkPHP数据库驱动之mysql事物回滚的更多相关文章
- MySQL事物回滚
#commit.rollback用来确保数据库有足够的剩余空间:#commi.rollback只能用于DML操作,即insert.update.delet;#rollback操作撤销上一个commit ...
- msql,触发器无事物回滚,插入之前满足条件再插入
很少写mysql的触发器和存储过程,由于需要需要做一个很小的判断,要用到触发器,要达到的效果就是,插入之前判断是否满足条件如果不满足就不插入 如果用sqlserver 或者orcale 就很简单,按s ...
- 复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等
使用配置文件properties进行连接数据库 首先创建一个file自定义文件名,但是后缀名必须改为.properties(不分大小写):如config.properties: 然后双击config. ...
- 解析php mysql 事务处理回滚操作
论坛扣币项目中,用户支付论坛币的时候如果突然断网.电脑死机.停电.等其它自然灾害时,导致本次交易没有成功(即用户的币已经扣掉了,但是服务器数据库中没有消费记录等其它情况),这种情况应该怎么样进行处理呢 ...
- 浅析Mysql 数据回滚错误的解决方法
介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下 MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollbac ...
- 解析php mysql 事务处理回滚操作(附实例)
其实用PHP来处理mysql的事务回滚并不难,下面小编就详细的为大家介绍一下.相信大家看完之后都知道如何使用 很多新手在进行项目过程中,会碰到这样一种情况,如:论坛扣币项目中,用户支付论坛币的时候如果 ...
- 浅析Mysql数据回滚错误的解决方法
介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下 MYSQL的事务处理主要有两种方法. 1.用begin,rollback,commit来实现 begin 开始一个事 ...
- C#里面的事物回滚,解决同步数据插入时出现重复数据
什么是事物回滚: 举个栗子,你在你家的银行分行取钱,取完钱数据要同步,而且可能每个分行都有一个存储这些数据的数据库,分行的这些 存取的记录都需要实时同步,如果你取完500刚好断电了,好嘛,分行可能刚记 ...
- Spring-Java事物回滚失效处理
spring-Java事物回滚失效处理最近在做项目中,无意间发现有个类在抛事物回滚操作,数据也正常的插入到数据库当中了,于是仔细查看看一下具体原因. 一切还是要从Java的检查型异常和非检查型异常说起 ...
随机推荐
- web 自动化遇到 shadowDOM 节点你会操作吗?
本文转载自: http://www.lemfix.com/topics/971 近期有同学在做web自动化的时候,发现页面上有些元素,在selenium中无法通过xpath来定位,各种原因找了半天,都 ...
- MariaDB主从复制和读写分离
一.基础环境 二.配置MariaDB服务 1.安装MariaDB # yum install -y mariadb mariadb-server # systemctl start mariadb # ...
- AndroidStudio使用的kotlin简介
Kotlin是一种在Java虚拟机上执行的静态型别程式语言,它也可以被编译成为JavaScript原始码.它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的程式语言,其名称来自于圣 ...
- React中refs持久化
根据使用React的版本,选择合适的方法. 字符串模式 :废弃不建议使用 回调函数,React版本 < 16.3 React.createRef() :React版本 >= 16.3 回调 ...
- Spring 关于ResponseBody注解的作用
//responseBody一般是作用在方法上的,加上该注解表示该方法的返回结果直接写到Http response Body中,常用在ajax异步请求中, //在RequestMapping中 ret ...
- Java面向对象之构造器
目录 Java面向对象之构造器 利用构造器确保初始化 构造器重载 Java面向对象之构造器 利用构造器确保初始化 初始化问题是关系编程方式是否安全的一个重要的问题. 功能:在创建对象时执行初始化. 在 ...
- React 组件的生命周期方法
React 组件的生命周期方法 按渲染顺序: 1: componentWillMount() – 在渲染之前执行,在客户端和服务器端都会执行. 2: componentDidMount() – 仅在第 ...
- bbbbbb
Blazor 机制初探以及什么是前后端分离,还不赶紧上车? 标签: Blazor .Net 上一篇文章我发了一个 BlazAdmin 的尝鲜版,这一次主要聊聊 Blazor 是如何做到用 C# 来写前 ...
- C# 结合 PInvoke 对接 IP 摄像头的笔记
最近做项目的时候,需要对接厂商提供的 IP 摄像头.但是他们只提供了 C++ 的 SDK,没办法,只能开始撸 C# 的 SDK Helper 类.本篇文章主要记录了对接 C++ DLL 需要注意的几个 ...
- SpringMVC框架之第三篇
2.高级参数绑定(重点) 2.1.数组类型 数组类型的参数可以传递一批相同的数据到Controller的方法中. 2.1.1.需求 批量删除:在商品列表页面选中多个商品,然后删除. 2.1.2.需求分 ...