在活动记录中使用本机SQL函数(codeigniter)

时间:2011-10-26 08:16:53

标签: php codeigniter

我正在尝试获取日期大于或等于今天的所有数据。 这是我的工作:

$this->db->select('id, name');
$this->db->where('dr', '1');
$this->db->where('end >=', 'CURDATE()');
$query = $this->db->get('store');

但它不起作用。我错了什么?

2 个答案:

答案 0 :(得分:12)

Active Records会自动转义您的查询,因此CURDATE()将作为字符串传递,而不是使用mysql函数。 你最好手动运行你的查询,比如

$query = $this->db->query("SELECT id,name FROM store WHERE dr = '1' AND end >= CURDATE()");

如果你仍想使用AR,你可以传递一个FALSE作为$this->db->where的第三个参数,以避免CI自动转义:

$this->db->select('id,name')
         ->where('dr','1')
         ->where('end >=', 'CURDATE()', FALSE);
$query = $this->db->get('store');

答案 1 :(得分:3)

我不在CI中使用活动记录,但我猜测CURDATE()被放入查询中的字符串中,因此它正在WHERE end >= 'CURDATE()'而不是WHERE end >= CURDATE()

如果end是时间戳字段,请尝试...

$this->db->where('end >=', time());

如果end是日期时间字段,请尝试...

$this->db->where('end >=', date("Y-m-d H:i:s"));