如何在CodeIgniter Active Record中编写查询

时间:2010-06-21 22:13:29

标签: php activerecord codeigniter

我在获取codeigniter活动记录时出现了一些问题,无法生成如下查询:

SELECT fruits.* FROM fruits
WHERE fruits.color = 'red'
AND ( fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7 );

基本上我想要几个或者子句,但是总是强制执行一个where子句。

$this->db->select( 'fruits.*' );
$this->db->from( 'fruits' );
$this->db->where( 'fruits.color', 'red' );
$this->db->or_where( 'fruits.size', 'medium' );
$this->db->or_where( 'fruits.name', 'kiwi' );
$this->db->or_where( 'fruits.length', 7 );

产生类似的东西:

SELECT fruits.* FROM fruits WHERE fruits.color = 'red' OR fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7;

我需要强制颜色总是红色。

有没有一个像样的方法呢?

1 个答案:

答案 0 :(得分:0)

使用CodeIgniter Active Record无法正确实现此目的。

唯一不太难看的方法是使用自定义字符串 where() 这样的函数:

$this->db->select( 'fruits.*' );
$this->db->from( 'fruits' );
$where = "fruits.color = 'red' AND ( fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7 );";
$this->db->where( $where );

重要提示:请注意,使用自定义字符串时,您的变量不会被转义,因此,您需要使用 $ this-> db-> escape()

$this->db->select( 'fruits.*' );
$this->db->from( 'fruits' );

$color = 'red';
$size = 'medium';
$name = 'kiwi';
$length = 7;
$where = "fruits.color = '".$this->db->escape($color)."' AND ( fruits.size = '".$this->db->escape($size)."' OR fruits.name = '".$this->db->escape($name)."' OR fruits.length = '".$this->db->escape($length)."');";
$this->db->where( $where );

修改

我对这个好的查询感到困惑,我纠正了它:)