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

发布于 2024-12-12 00:14:24 字数 248 浏览 0 评论 0原文

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

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

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

I'm trying to get all data which date is greater than or equal to today.
Here is what I do:

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

But it doesen't work. What I wrong ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里泪两行 2024-12-19 00:14:24

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

Active Records automatically escapes your query, so CURDATE() will be passed as a string instead of using the mysql function.
You'd better off runing your query manually, something like

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

Or if you still want to use AR, you could pass a FALSE as third parameter of $this->db->where to avoid automatic escaping by CI:

$this->db->select('id,name')
         ->where('dr','1')
         ->where('end >=', 'CURDATE()', FALSE);
$query = $this->db->get('store');
全部不再 2024-12-19 00:14:24

我在 CI 中不使用活动记录,但我猜测 CURDATE() 被放入查询中的字符串中,因此它正在执行 WHERE end >= 'CURDATE()'< /code> 与 WHERE end >= CURDATE() 相反

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

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

如果 end 是日期时间实地尝试...

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

I don't use active records in CI but I would guess that CURDATE() is being put in a string in the query so it's doing WHERE end >= 'CURDATE()' as opposed to WHERE end >= CURDATE()

If end is a timestamp field try...

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

If end is a datetime field try...

$this->db->where('end >=', date("Y-m-d H:i:s"));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文