开启事务

/**
 * 对数据库多张表进行 增、删、改的时候,开启事务
 * 用Yii2 来进行举例
 * 
public function actionCreateDynamic()
{
$request = Yii::$app->request;
$user_id = $request->post('user_id'); //用户id
$content = $request->post('content'); // 动态内容
$publisher = $user_id; //发布者id
$add_time = time();
if(!$user_id || !$content || !$publisher) $this->ReturnJson(0,'数据不完整'); // 数据不完整
if(!isset($_FILES['img'])) $this->ReturnJson(0,'请上传图片');
//查询当前用户是否是明星
$star_info = Star::find()
->where(['user_id' => $user_id])
->one();
if(!$star_info) $this->ReturnJson(0,'您还不是明星,无法发布动态');
 * 
$transaction = Yii::$app->db->beginTransaction(); // 开启事务
 * 
//添加信息到动态表
$add_dynamic = 'insert into dynamic (content,publisher,add_time) 
values ("'.$content.'","'.$publisher.'","'.$add_time.'")';
$create_dynamic = Yii::$app->db->createCommand($add_dynamic)->execute();
$last_id = Yii::$app->db->lastInsertID; // 插入ID
if(!$create_dynamic) $this->ReturnJson(0,'添加失败',null);
$id = $last_id; // 获取动态表中的动态id
//上传图片到动态图片表
$img = new Star();  // 调用上传文件的函数方法
//判断是多文件上传 还是单文件上传
if(is_array($_FILES['img']['name'])){ // 如果是数组
$upload = $img->uploadMoreFile('img');
}else{
$upload = $img->uploadFile('img');
}
if(!$upload) $this->ReturnJson(0,'图片上传失败');
if (!$id) $this->ReturnJson(0,'没有获取到动态id');
if(is_array($upload)){ //如果是多张图片上传
$val = '';
foreach ($upload as $k => $v) {
$val .= $val ? ',(' . $id . ',"' . $v . '")' : '(' . $id . ',"' . $v . '")';
}
$insert = 'insert into dynamic_img (dynamic_id,img_url) values ' . $val . '';
$create = Yii::$app->db->createCommand($insert)->execute();
}
else
{
$insert = 'insert into dynamic_img (dynamic_id,img_url) values ('.$id.',"'.$upload.'")';
$create = Yii::$app->db->createCommand($insert)->execute();
}
if(!$create)
{
$transaction->rollBack(); // 数据回滚
// 删除图片
if(is_array($upload))
{
foreach($upload as $k=>$v) // 多张
{
if(file_exists($v))
{
unlink($v);
}
}
}
else
{
if(file_exists($upload)) // 单张
{
unlink($upload);
}
}
$this->ReturnJson(0,'创建失败');
}
$transaction->commit();
$this->ReturnJson(1,'创建成功');
}

 */
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值