/** * 对数据库多张表进行 增、删、改的时候,开启事务 * 用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,'创建成功'); } */