CodeIgniter 活动记录缺少 FROM 子句

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

我有以下内容:

/** 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 附近使用的正确语法 (

created_for
<= '2019-04-24 18:47:03')' at line 2

选择 * WHERE (`created_for` <= '2019-04-24 18:47:03')

文件名:modules/sound/models/Sound_request_model.php

行数:35

我做错了什么?

php mysql codeigniter activerecord query-builder
5个回答
1
投票

您可以将其放入一个声明中

    $this->db->get_where('site_requests', array('created_for <=', '2019-04-24 18:47:03'));
    print_r($this->db->last_query());

您将需要链接 ->result() 或 result_array() 或任何输出函数来获取数据返回。

希望这有帮助


0
投票
$this->db->where("(created_for <= " . "'2019-04-24 18:47:03'" . ")");

应该是之后

$this->db->get('site_requests');

0
投票

尝试使用键值形式:

$this->db->where("created_for <=", "2019-04-24 18:47:03");


0
投票

您缺少定义查询的

FROM
部分。 我认为你只需要更改你的代码:

    $query = $this->db->from('site_requests')
       ->where("(created_for <= " . "'2019-04-24 18:47:03'" . ")")
       ->get();
    $result = $query->result();
    print_r($result);

0
投票

您第一次调用

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();
© www.soinside.com 2019 - 2024. All rights reserved.