【问题标题】:Codeigniter Active Record SQL syntax errorCodeigniter Active Record SQL 语法错误
【发布时间】:2013-06-15 17:58:22
【问题描述】:

我的一个模型中有以下 Active Record 模式:

$this->db->get('names');
$this->db->like('name', $name);
$this->db->where('ratio >=', 0.75);
$this->db->order_by('ratio', 'desc');

$query = $this->db->get();

这给了我一个语法错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `ratio` >= 0.75 AND `name` LIKE '%JORDAN%' ORDER BY `ratio' at line 2

返回的完整语句是:

SELECT * WHERE `ratio` >= 0.75 AND `name` LIKE '%JORDAN%' ORDER BY `ratio` desc

我不知道为什么我的表 names 没有显示,因为我正在调用 $this->db->get('names'); 应该产生 SELECT * FROM names,它只是没有返回错误吗?这个陈述有什么问题,我应该怎么做才能更正我的 Active Record 调用?

【问题讨论】:

    标签: php mysql codeigniter activerecord


    【解决方案1】:

    get 需要放在最后。如果您想在之前选择一个表 - 使用$this->db->from('names');,然后只使用$this->db->get();。所以完整的代码:

    $this->db->like('name', $name);
    $this->db->where('ratio >=', 0.75);
    $this->db->order_by('ratio', 'desc');
    $query = $this->db->get('names');
    

    或链接版本:

    $query = $this->db->like('name', $name)
    ->where('ratio >=', 0.75)
    ->order_by('ratio', 'desc')
    ->get('names');
    

    使用from

    $query = $this->db->from('names')
    ->like('name', $name)
    ->where('ratio >=', 0.75)
    ->order_by('ratio', 'desc')
    ->get();
    

    【讨论】:

    • 谢谢!链接版本对我来说更有意义。
    • 不客气! :) 是的,它产生了更整洁的代码,但它仍然是一个偏好问题,所以我向你展示了两种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2014-12-24
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多