我有以下内容:
/** Load necessary stuff **/
$this->load->helper('date');
$this->db->get('site_requests');
//echo mdate('%Y-%m-%d %H:%i:%s', now());
//die;
$this->db->where("(created_for <= " . "'2019-04-24 18:47:03'" . ")");
$this->db->get();
print_r($this->db->last_query());
但我收到以下信息:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'WHERE 附近使用的正确语法 (
<= '2019-04-24 18:47:03')' at line 2created_for
选择 * WHERE (`created_for` <= '2019-04-24 18:47:03')
文件名:modules/sound/models/Sound_request_model.php
行数:35
我做错了什么?
您可以将其放入一个声明中
$this->db->get_where('site_requests', array('created_for <=', '2019-04-24 18:47:03'));
print_r($this->db->last_query());
您将需要链接 ->result() 或 result_array() 或任何输出函数来获取数据返回。
希望这有帮助
$this->db->where("(created_for <= " . "'2019-04-24 18:47:03'" . ")");
应该是之后
$this->db->get('site_requests');
尝试使用键值形式:
$this->db->where("created_for <=", "2019-04-24 18:47:03");
您缺少定义查询的
FROM
部分。
我认为你只需要更改你的代码:
$query = $this->db->from('site_requests')
->where("(created_for <= " . "'2019-04-24 18:47:03'" . ")")
->get();
$result = $query->result();
print_r($result);
您第一次调用
get()
(其中包含表名称)会执行 SELECT 查询。 因为之前没有调用其他查询构建器方法,所以渲染的 SQL 是 SELECT * FROM site_requests
。
在 CI_DB_query_builder 类中,
get()
方法在通过调用受保护方法 _reset_select()
执行查询后重置构建的 SELECT 查询。
您后续调用
where()
然后 get()
(没有表值)会有效执行
SELECT * WHERE (`created_for` <= '2019-04-24 18:47:03')
因为应用了默认的 SELECT 子句,但查询生成器从未收到新 SELECT 查询的表声明。
最终,最优雅/最简洁的构建查询、执行查询并返回零个或多个对象的数组的原因是:
return $this->db
->get_where('site_requests', ['created_for <=' => '2019-04-24 18:47:03'])
->result();
呈现的 SQL 将类似于:
SELECT *
FROM `site_requests`
WHERE `created_for` <= '2019-04-24 18:47:03'
如果您确实想使用SQL函数
NOW()
,那么您需要分别调用where()
和get()
,以便可以关闭函数调用的引用。
return $this->db
->where('created_for <=', 'NOW()', false)
->get('site_requests')
->result();