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事物回滚的更多相关文章

  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. ConcurrentHashMap源码走读

    目录 ConcurrentHashMap源码走读 简介 放入数据 容器元素总数更新 容器扩容 协助扩容 遍历 ConcurrentHashMap源码走读 简介 在从JDK8开始,为了提高并发度,Con ...

  2. HTML DOM的创建,删除及替换

    创建HTML元素 document.appendChild() 将新元素作为父元素的最后一个子元素进行添加 如需向HTML DOM添加新元素,首先必须创建该元素,然后把它追加到已有的元素上 var n ...

  3. SecureCRT远程连接The remote system refused the connection问题

    今天用SecureCRT远程连接Linux(Centos 7)时,连不上,报错The remote system refused the connection.于是就百度,首先查看sshd服务有没有启 ...

  4. Ubuntu 无法打开系统设置

    最近不知道咋搞得,导致系统设置打不开,可能是系统输入法的问题吧,运行以下命令: sudo apt-get install gnome-control-center

  5. SVN安装简介

    博主最近换个份工作,代码管理用的是SVN,因为之前用的Git管理代码的,SVN没接触过,既然公司中要用,就学习下使用吧.从最基本的安装开始吧. SVN官网:https://tortoisesvn.ne ...

  6. 大数据-hadoop-MapReduce计算流程

    MapReduce计算流程 1  首先是通过程序员所编写的MR程序通过命令行本地提交或者IDE远程提交 2 一个MR程序就是一个Job,Job信息会给Resourcemanger,向Resourcem ...

  7. phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)

    漏洞详情 范围 phpMyAdmin 4.8.0和4.8.1 原理 首先在index.php 50-63行代码 $target_blacklist = array ( 'import.php', 'e ...

  8. VMware虚拟机Linux配置

    1.设置时区和时间 打开虚拟机,设置好用户名和密码,就可以进入了. 进入之后,可以先设置时区和时间 在CentOS桌面右上角,点击时间,然后进行设置 2.添加用户使用root权限 安装虚拟机之后,登录 ...

  9. Mybatis XML映射文件

    mybatis为聚焦于SQL而构建,SQL映射文件常用的顶级元素如 resultMap,是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象. insert,映射插入语句 update, ...

  10. diango使用顺序

    使用顺序 settings 静态文件配置 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #文件夹根目录 ...