我想在我的 CodeIgniter 应用程序中编写一个参数化的 SELECT 查询。
我有一个包含两个值的整数数组:
$prices = [23, 98];
我尝试在 IN 条件下使用该数组,但以下尝试不起作用。
return $this->db->query(
"select * from product where price IN (?)",
array(implode(',',$prices)
)->result();
通过检查
$this->db->last_query()
,将呈现:
SELECT * FROM product WHERE price IN ('25,36')
显然,我不需要单个字符串值,但如果我不
implode()
参数数组中的数组,我会收到一条错误消息“运算符不存在”。
试试这个(未经测试)
$query = $this->db->from('product')
->where_in('price', implode(',',$prices))
->get();
CodeIgniter Active Record 文档非常好,所以你绝对应该阅读它。例如,您会注意到 select()
方法是不必要的,因为我们需要所有项目,因此假定为
*
。
return $this->db->query("select * from product where price IN ('". implode(',',$prices)->result()."' )");
query()
调用时,CodeIgniter 不需要
IN
之后的括号。第二个参数需要一个数组,其中每个元素按顺序与每个占位符相关。 将您的
$prices
数组(不变)作为参数数组的第一个/唯一元素传递。
return $this->db->query('SELECT * FROM product WHERE price IN ?', [$prices])->result();
您不能内爆您的数组——这将呈现一个无效的 SQL 字符串,其中 IN 后跟不带括号的字符串值。
return $this->db->query(
'SELECT * FROM product WHERE active = ? AND price IN ?',
[$active, $prices]
)->result();
return $this->db->where_in('price', $prices)->get('product')->result();