前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原生 PHP、Laravel5.4、Yii2 和 ThinkPHP3.2 中的事务实例

原生 PHP、Laravel5.4、Yii2 和 ThinkPHP3.2 中的事务实例

作者头像
guanguans
发布2018-05-09 16:05:09
9880
发布2018-05-09 16:05:09
举报
文章被收录于专栏:琯琯博客琯琯博客

一、原生 MySQL

代码语言:javascript
复制
<?php
// 开启一个事务
mysql_query('START TRANSACTION'); 
$res1 = mysql_query(update table set money=money-1 where id =)
$res2 = mysql_query(update table set money=money+1 where id =)

if($res1 && $res2){
    // 成功之后提交
    mysql_query('COMMIT');     
}else{
    // 失败之后回滚
    mysql_query('ROLLBACK');   
}

二、Laravel5.4

代码语言:javascript
复制
<?php
DB::beginTransaction();

try{
    // 业务处理和事务提交
    $data['name'] = 'test_name';
    $data['age']  = 25;
    $getGroupId   = DB::table('db_name.table_name1')->insertGetId($data);
    
    foreach ($list_data as $v) {
        DB::table('db_name.table_name2')->insert([
            'group_id' => $getGroupId,
            'name'     => $v['name']
        ]);
    }
    // 成功之后提交
    DB::commit();
} catch (\Exception $exception) {
    // 接收异常处理并回滚和抛出异常
    DB::rollBack();
    throw new \Exception('操作失败!');
}

三、Yii2

代码语言:javascript
复制
<?php
// 开启事务
$transaction = Yii::$app->db->beginTransaction();
try {
    // 插入文章
    $res = $this->save();
    $data = [];
    foreach ($category_ids as $val) {
        $data[] = [$this->id, $val];
    }
    // 添加或更改分类文章时,先清空
    CategoryArticle::deleteAll('post_id = :post_id ', [':post_id' => $this->id]);

    // 批量插入分类文章表
    Yii::$app->db->createCommand()->batchInsert('feehi_category_article', ['post_id','category_id'], $data)->execute();
    // 提交
    $transaction->commit();
} catch (\Exception $e) {
    // 回滚
    $transaction->rollback();
    // 抛出异常
    throw $e;
}

四、ThinkPHP3.2

代码语言:javascript
复制
<?php
$modelRefund = D('Home/OrderRefund');
$modelDetail = D('Home/OrderDetail');

// 启动事务
$modelRefund->startTrans();
$refund_status   = 1;
$updateRefundRes = $modelRefund->saveRefundStatus($where,$refund_status);
$status          =6;

foreach ($order_detail as $k => $v) {
    $where['id']     = $v;
    $updateDetailRes = $modelDetail->saveDetailCompleteStatus($where,$status);
}

if ($updateRefundRes && $updateDetailRes) {
    // 事务提交
    $modelRefund->commit();
    $this->success(C('OPERA_SUCCESS'));
} else {
    // 事务回滚
    $modelRefund->rollback();
    $this->error(C('OPERA_FAILD'));
}

(完)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、原生 MySQL
  • 二、Laravel5.4
  • 三、Yii2
  • 四、ThinkPHP3.2
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档