如何在CodeIgniter中实现带WHERE IN的MySQL UPDATE语句?
在CodeIgniter中批量更新指定ID数据的正确实现
嘿,我立马就发现你代码里的问题啦!你把ID列表写成了逗号分隔的字符串,但CodeIgniter的where_in()方法要求传入的是数组类型的参数,这就是你的更新操作没生效的原因~
正确写法(直接使用数组)
直接把ID列表定义成数组就行,这样where_in()能正确识别每个ID:
// 定义数组格式的ID列表 $id_list = [1, 2, 3, 4, 5]; $this->db->where_in('id', $id_list); $this->db->update('my_table', $mydata);
如果只能拿到逗号分隔的字符串怎么办?
要是因为业务场景限制,你只能获取到类似'1,2,3,4,5'这样的字符串,也可以先把它转成数组,同时建议做类型过滤避免SQL注入风险:
$id_str = '1,2,3,4,5'; // 把字符串拆分成数组 $id_list = explode(',', $id_str); // 将每个元素转为整数,防止恶意注入 $id_list = array_map('intval', $id_list); $this->db->where_in('id', $id_list); $this->db->update('my_table', $mydata);
为什么原来的代码不生效?
当你传入字符串'1,2,3,4,5'时,CodeIgniter生成的SQL会是这样的:
UPDATE
my_tableSET ... WHEREidIN ('1,2,3,4,5')
这相当于只在找ID等于整个字符串'1,2,3,4,5'的记录,显然数据库里不存在这样的ID,所以更新操作没有任何数据被修改。
内容的提问来源于stack exchange,提问作者Md. Shamvil Hossain
相关产品推荐
相关产品推荐

