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

CodeIgniter中无法执行更新与删除操作求助

嘿,兄弟,作为踩过CodeIgniter不少坑的老鸟,来给你捋捋删改功能报错的大概率问题点,帮你快速排坑!

首先先把你给出的控制器代码片段贴出来,方便分析:

function __construct() { 
    parent::__construct(); 
    $this->load->model('Danhmuc_model'); 
} 
function xoadm() { 
    $id = $this->uri->segment(5); 
    $this->Danhmuc_model->delete($id); 
    $this->session->set_flashdata('mess',' Đã xóa thành công'); 
    // 你代码截断了,应该是要写redirect跳转吧?
}

最可能踩的几个坑

1. URI 分段索引拿错了!

CodeIgniter的uri->segment()是从1开始计数的!比如你的删除URL如果是你的域名/admin/danhmuc/xoadm/123,那对应的分段是:

  • segment(1) = admin
  • segment(2) = danhmuc
  • segment(3) = xoadm
  • segment(4) = 123(也就是你要的ID)

你用segment(5)根本拿不到ID值,传给Model的$id是空的,删除操作自然会报SQL语法错误或者找不到数据的错!

修正方案:
要么改成$id = $this->uri->segment(4);,要么用更稳妥的路由传参方式:
在application/config/routes.php里加一条路由规则:

$route['admin/danhmuc/xoadm/(:num)'] = 'admin/danhmuc/xoadm/$1';

然后控制器方法改成直接接收参数:

function xoadm($id) {
    // 后续逻辑...
}

2. Model层的删除方法大概率有问题

你没贴Model代码,但新手很容易在这里出错,比如忘记加WHERE条件、没做参数校验、SQL语法错误。给你一个标准的CI Model删除方法模板:

class Danhmuc_model extends CI_Model {
    public function delete($id) {
        // 先校验ID合法性,防止非法参数
        if(!is_numeric($id) || $id <= 0) {
            return false;
        }
        // 用CI查询构造器,自动防SQL注入
        $this->db->where('id', $id);
        // 这里的danhmuc是你的数据表名,改成你实际的表名
        return $this->db->delete('danhmuc');
    }
}

3. 别忘了跳转和Session的细节

你代码最后截断了,一定要加redirect()跳转回列表页!不然不仅看不到flash提示,还可能出现白屏。另外要确保Session库已经加载(CI3及以上默认加载,但保险起见可以在构造函数里手动加$this->load->library('session');)

4. 打开错误提示,看具体报错!

把index.php里的ENVIRONMENT改成development,这样就能看到具体的错误信息——是SQL语法错?还是参数为空?还是权限问题?比瞎猜有用100倍!

给你一个修正后的完整控制器示例

function __construct() { 
    parent::__construct(); 
    $this->load->model('Danhmuc_model'); 
    $this->load->library('session');
} 

function xoadm($id) {
    // 先校验ID合法性
    if(!is_numeric($id) || $id <= 0) {
        $this->session->set_flashdata('mess',' ID không hợp lệ');
        redirect('admin/danhmuc');
        return;
    }
    
    // 执行删除并判断结果
    $delete_result = $this->Danhmuc_model->delete($id);
    if($delete_result) {
        $this->session->set_flashdata('mess',' Đã xóa thành công');
    } else {
        $this->session->set_flashdata('mess',' Xóa thất bại, có thể bản ghi không tồn tại');
    }
    // 跳转回列表页
    redirect('admin/danhmuc');
}

关于更新功能的推测

你没贴更新的代码,但大概率也是类似问题:比如没拿到要更新的ID、Model层的update方法忘记加WHERE条件(导致全表更新)、表单参数没正确获取。给你一个标准的Model更新模板参考:

public function update($id, $data) {
    if(!is_numeric($id) || empty($data)) {
        return false;
    }
    $this->db->where('id', $id);
    return $this->db->update('danhmuc', $data);
}

先按上面的步骤排查,应该能解决大部分问题,如果还有具体报错,把错误信息贴出来就能更快定位啦!

内容的提问来源于stack exchange,提问作者Diao Vũ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:29:04