如何在单个函数中执行两条删除语句?仅首表生效问题求助
问题分析与解决方案
核心问题
- 模型函数提前终止:原模型中第一个
return执行后,函数直接结束,后续的login表删除语句永远不会运行。 - 参数顺序不匹配:控制器调用
user_delete($u_id, $lr_id),但模型定义的是user_delete($lr_id, $u_id),参数传递顺序颠倒,导致删除login表时使用了错误的ID值。 - ID取值重复:控制器中
$u_id和$lr_id都取uri->segment(3),两个变量值完全相同,不符合业务逻辑(用户ID和角色ID应为不同值)。
修正后的代码
控制器代码
public function userdelete() { // 假设URL格式为 users/userdelete/{u_id}/{lr_id},从不同分段获取对应ID $u_id = $this->uri->segment(3); $lr_id = $this->uri->segment(4); $returndata = $this->user_model->user_delete($u_id, $lr_id); if($returndata) { $this->session->set_flashdata('successmessage', 'user deleted successfully..'); redirect('users'); } else { $this->session->set_flashdata('warningmessage', 'Something went wrong..Try again'); redirect('users'); } }
模型代码
public function user_delete($u_id, $lr_id ) { // 先执行login表删除操作 $deleteLogin = $this->db->delete('login',['u_id'=>$u_id]); // 再执行login_roles表删除操作 $deleteRoles = $this->db->delete('login_roles',['lr_id'=>$lr_id]); // 返回两个删除操作是否都成功 return $deleteLogin && $deleteRoles; }
关键修正点说明
- 移除多余return:将两个删除操作的结果分别保存,最后统一返回是否都成功,避免函数提前终止。
- 修正参数顺序:让模型的参数定义和控制器的传参顺序一致,确保ID值传递正确。
- 区分ID来源:从URL的不同分段获取
u_id和lr_id,保证两个ID值符合业务逻辑。
内容的提问来源于stack exchange,提问作者MOHAMMED AWADH
相关产品推荐
相关产品推荐

