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

MySQL错误1292:截断DOUBLE值异常及CodeIgniter模型删除问题

解决CodeIgniter中DELETE操作的1292 Truncated incorrect DOUBLE value错误

这个错误的原因其实一眼就能看出来——你给where_not_in()传的参数类型错了!

你现在传的是一个拼接好的字符串'305,304',CodeIgniter的查询构造器会把它当成单个完整的值来处理,所以生成的SQL就变成了:

DELETE FROM student_marks WHERE student_id NOT IN ('305,304')

而你的student_id应该是整数类型,数据库尝试把这个字符串转成数值的时候,就会触发"截断不正确的DOUBLE值"的错误。

正确的做法

where_not_in()方法需要接收的是数组类型的参数,而不是逗号分隔的字符串。分两种情况处理:

  1. 如果你的s_id参数本身是逗号分隔的字符串,先把它拆成数组:
public function delete_marks($s_id){ 
    // 将逗号分隔的ID字符串转为数组
    $student_ids = explode(',', $s_id);
    $this->db->where_not_in('student_id', $student_ids); 
    return $this->db->delete('student_marks'); 
}
  1. 如果调用这个方法时,你已经能拿到数组形式的ID列表,直接传数组就行:
// 调用示例
$this->your_model->delete_marks([305, 304]);

修正后生成的SQL会变成:

DELETE FROM student_marks WHERE student_id NOT IN (305,304)

这样数据库就能正确识别每个ID是独立的数值,不会再出现类型转换的错误。

额外提醒

  • 确认你的student_marks表中student_id字段是整数类型,避免不必要的类型转换问题
  • 如果ID来自用户输入,记得做好合法性验证(CodeIgniter的查询构造器已经自动处理了参数绑定,不用担心SQL注入)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:22:11