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的检查型异常和非检查型异常说起 ...
随机推荐
- Eclipse——关联源代码
Eclipse——关联源代码 摘要:本文主要说明了如何在Eclipse里关联源代码. 下载源码包 首先去想要关联的jar包的官网下载对应jar包的源代码,拿Tomcat的类库举例,先去官网下载源码包: ...
- 解决:install service error: InstallAsEventCreate() failed: xxx registry key already exists
目录 一.事故现场 二.分析 三.解决方案 一.事故现场 在windows系统下安装服务,cmd窗口执行如下命令: "E:\work\_base\PsUm\PsUser\LdapWebSer ...
- IT兄弟连 HTML5教程 CSS3属性特效 盒模型阴影
除了为文字添加阴影,我们还可以为盒模型添加阴影.盒模型阴影的属性名称为box-shadow,此属性与text-shadow一样有4个值,前两个值分别表示水平方向位移距离和垂直方向的位移距离,第三个值表 ...
- 部署vue-element-admin流程
1.修改环境变量: 在以下两个文件: .env_staging [如果修改这个,需要以npm run build:stage启动] .env_production [如果修改这个,需要以npm run ...
- C lang:Definition function
Ax_note in parameter for show_n_char() is formal parameter Aa_Definition function #include <stdio ...
- C/C++ 中的头文件 stdio.h和stdlib.h
stdio 就是指 “standard input & output" 标准输入输出 stdio.h所包含的函数: 文件访问fopenfreopenfflushfclose二进制输入 ...
- Saltstack_使用指南09_远程执行-编写执行模块
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...
- [20191125]oracel SQL parsing function qcplgte 2.txt
[20191125]oracel SQL parsing function qcplgte 2.txt --//参考前面的测试:http://blog.itpub.net/267265/viewspa ...
- 增加sudo用户访问oracle
增加zgy用户可以访问数据库[root@DBDATA ~]# useradd zgy--设置密码[root@DBDATA ~]# passwd zgy--设置组[root@DBDATA ~]# use ...
- InnoDB Architecture (InnoDB In-Memory Structures 转载)
转载.节选于 https://dev.mysql.com/doc/refman/8.0/en/innodb-in-memory-structures.html InnoDB Architecture ...