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

CodeIgniter4与MySQL中含下划线字段(cat_id)无法删除行的问题

问题:使用带下划线的cat_id字段无法删除数据库记录

问题背景

所有路由、控制器和模型配置看似正常,但使用带下划线的cat_id字段时无法删除数据库记录,改用不带下划线的id字段则可正常删除。

相关代码与配置

数据库表结构

CREATE TABLE `tbl_category` (
    `cat_id` INT(10) NOT NULL AUTO_INCREMENT,
    `cat_name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_0900_ai_ci',
    `cat_desc` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_0900_ai_ci',
    `cat_status` INT(10) NULL DEFAULT '1',
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`cat_id`) USING BTREE
)
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
AUTO_INCREMENT=12
;

Model代码

public function fnCategoryDelete($id){
    $this->where('cat_id', $id)->delete('tbl_category');
}

Controller代码

public function categorydelete($id=null){
    
    $this->cat_obj->fnCategoryDelete($id);
    return $this->response->redirect(site_url('category'));
    
}

Route代码

$routes->get('categorydelete/(:num)', 'AdminControllers\CategoryController::categorydelete/$1');

View代码

<a href="<?php  echo base_url("categorydelete/".$item['cat_id']); ?>" class="btn btn-danger btn-sm"><i class="fas fa-trash"></i></a>

排查与解决方案

  • 修正Model的数据库调用语法
    你的Model代码漏掉了CodeIgniter数据库操作必须的$this->db对象,这是导致删除操作不执行的核心问题。正确写法二选一:

    // 链式调用写法
    public function fnCategoryDelete($id){
        $this->db->where('cat_id', $id)->delete('tbl_category');
    }
    
    // 直接传入条件数组写法
    public function fnCategoryDelete($id){
        $this->db->delete('tbl_category', ['cat_id' => $id]);
    }
    
  • 调试生成的SQL语句
    在Model方法中添加调试代码,查看实际执行的SQL是否符合预期:

    public function fnCategoryDelete($id){
        $this->db->where('cat_id', $id)->delete('tbl_category');
        echo $this->db->last_query();
        exit;
    }
    

    访问删除链接后,检查输出的SQL是否为DELETE FROM tbl_category WHERE cat_id = [你的ID值],若不符合则排查条件拼接逻辑。

  • 确认参数传递是否正确
    在Controller中临时打印传入的$id,确认是否接收到正确的数值:

    public function categorydelete($id=null){
        var_dump($id);
        $this->cat_obj->fnCategoryDelete($id);
        return $this->response->redirect(site_url('category'));
    }
    

    如果$id为null或错误值,检查View中链接生成是否正确,确认$item['cat_id']是否有有效值。

  • 验证路由匹配规则
    路由中(:num)仅匹配纯数字,确认cat_id是INT类型且View传递的是有效数字,若链接中cat_id为空或非数字,路由将无法匹配,导致Controller接收不到参数。

内容的提问来源于stack exchange,提问作者Mayur Koshti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:52:50