在 CodeIgniter 中根据 ID 删除单条记录应通过模型层封装,CI4 推荐先 find() 再 delete() 以确保主键验证与软删除支持,CI3 则建议在模型中使用 where + delete 方法;务必配置 $primaryKey 并避免无参 delete() 导致全表清空。

在 CodeIgniter 中根据 ID 删除单条数据库记录,推荐使用模型(Model)层封装操作,控制器(Controller)调用,确保逻辑清晰、安全可靠。以下是符合 CodeIgniter 3.x / 4.x 通用思路的标准写法(以 CI 4 为主,CI 3 类似但语法略有差异):
✅ CI4 中根据 ID 删除单条记录(推荐方式)
使用实体 + 模型的 find() + delete() 组合,自动处理主键验证与软删除(如启用):
- 确保模型已定义表名、主键(如 $primaryKey = 'id';)
- 先查再删,可配合异常处理或存在性判断
- 避免直接执行原始 SQL,防止注入和逻辑遗漏
// 在控制器中(例如 AdminController.php)
public function delete($id = null)
{
if ($id === null || !is_numeric($id)) {
return redirect()->back()->with('error', '无效的ID');
}
<pre class="brush:php;toolbar:false;">$model = new YourModel(); // 如 User_model
$record = $model->find($id);
if (!$record) {
return redirect()->back()->with('error', '记录不存在');
}
if ($model->delete($id)) {
return redirect()->to('/admin/list')->with('success', '删除成功');
} else {
return redirect()->back()->with('error', '删除失败:' . implode(', ', $model->errors()));
}}
✅ CI4 简洁版(直接 delete(),适合确定ID有效场景)
若已确保 ID 合法且无需前置校验,可一行完成(仍建议加 try-catch 或返回值判断):
$model = new YourModel();
$result = $model->delete($id); // 自动 WHERE id = ?
if ($result) { /* 成功 */ } else { /* 失败 */ }⚠️ 注意事项(避坑关键)
- 主键必须正确配置:模型中 $primaryKey = 'id';,否则 delete($id) 可能失效
- 软删除需显式启用:若使用 $useSoftDeletes = true;,delete() 是标记删除;强制物理删除用 $model->purgeDeleted();
- 批量删除风险:不要误用 $model->delete();(无参数)——这会清空整张表
- CI3 差异提示:CI3 中常用 $this->db->delete('table', ['id' => $id]);,但应优先封装进模型方法
? 补充:CI3 模型内标准删除方法示例
在 CI3 的模型中建议这样写:
public function delete_by_id($id)
{
$this->db->where('id', (int)$id);
return $this->db->delete($this->table_name);
}控制器中调用:$this->your_model->delete_by_id($id);











