You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个函数中执行两条删除语句?仅首表生效问题求助

问题分析与解决方案

核心问题

  1. 模型函数提前终止:原模型中第一个return执行后,函数直接结束,后续的login表删除语句永远不会运行。
  2. 参数顺序不匹配:控制器调用user_delete($u_id, $lr_id),但模型定义的是user_delete($lr_id, $u_id),参数传递顺序颠倒,导致删除login表时使用了错误的ID值。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:50:28