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
相关产品推荐
相关产品推荐

