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的检查型异常和非检查型异常说起 ...
随机推荐
- 解决:install service error: InstallAsEventCreate() failed: xxx registry key already exists
目录 一.事故现场 二.分析 三.解决方案 一.事故现场 在windows系统下安装服务,cmd窗口执行如下命令: "E:\work\_base\PsUm\PsUser\LdapWebSer ...
- 想精通分布式以及高并发架构?那你得先搞定ZooKeeper架构原理!
Zookeeper是分布式一致性问题的工业解决方案,是Apache Hadoop下解决分布式一致性的一个组件,后被分离出来成为Apache的顶级项目. 工程来源:是雅虎公司内部项目,据说雅虎内部很多项 ...
- ASP.NET Core 2.x 到 3.1 迁移指南
一.前言 今日(2019/12/4).NET Core 3.1 正式发布了,ASP.NET Core 3.1 随之发布,这次 3.0 到 3.1经过了两个月的短周期,并没有增加重大的功能,主要是对 3 ...
- Flask 教程 第十章:邮件支持
本文翻译自The Flask Mega-Tutorial Part X: Email Support 这是Flask Mega-Tutorial系列的第十部分,在其中我将告诉你,应用如何向你的用户发送 ...
- Java 基础复习 -- Enum 类
一.枚举类基本语法 在 Java SE5 中添加了一个看似很小的特性,即 enum 关键字,它使得我们在需要群组并使用枚举类型集时,可以很方便的处理. 所有的 enum 都继承自 java.lang. ...
- PHP命令执行漏洞初探
PHP命令执行漏洞初探 Mirror王宇阳 by PHP 命令执行 PHP提供如下函数用于执行外部应用程序:例如:system().shell_exec().exec().passthru() sys ...
- Android插件基础之类加载器学习
记录学习java 加载器学习所获心得,逐步记录了解java加载器的过程.为了知悉android 插件化的实现原理,从而需要从头了解android加载apk,以及基础的java类加载的加载过程情况,为方 ...
- IDEA新建servlet时出现的错误
未注入Tomcat里lib文件下的jar 这样即可
- MySQL数据库~~~~~锁和事务
一 锁 innodb存储引擎默认是行级锁 行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的.由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予 ...
- [Go] 使用net包作为tcp客户端读取http
1.tcp的客户端,并且直接读取http协议的全部内容,每次读取4096字节,直到最后一个字节是\n并且读取的长度小于4096 conn, err := net.Dial("tcp" ...