如何使用CodeIgniter的query()方法编写参数化的WHERE IN (?)条件?

问题描述 投票:0回答:3

我想在我的 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()
参数数组中的数组,我会收到一条错误消息“运算符不存在”。

php sql codeigniter activerecord where-in
3个回答
1
投票

试试这个(未经测试)

$query = $this->db->from('product')
                  ->where_in('price', implode(',',$prices))
                  ->get();

CodeIgniter Active Record 文档非常好,所以你绝对应该阅读它。例如,您会注意到 select()

 方法是不必要的,因为我们需要所有项目,因此假定为 
*


0
投票
试试这个

return $this->db->query("select * from product where price IN ('". implode(',',$prices)->result()."' )");
    

0
投票
使用占位符执行 WHERE IN

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();


要享受标准化引用/转义,请使用 CodeIgniter 的查询构建方法。

return $this->db->where_in('price', $prices)->get('product')->result();
    
© www.soinside.com 2019 - 2024. All rights reserved.