【问题标题】:Codeigniter 3 query builder auto quote wronglyCodeigniter 3 查询生成器自动引用错误
【发布时间】:2015-06-29 16:56:06
【问题描述】:

我正在尝试获取下面的sql格式

SELECT * FROM `ci_nest` WHERE `lft` > 9 AND `rgt` < 28 AND `rgt` = `lft` + 1 ORDER BY `lft`

但是 Codeigniter 3 在错误的位置插入引号。

我的代码如下

$this->db->where($leftcol . ' > ' . $leftval . ' AND ' . $rightcol . ' < ' . $rightval);
$this->db->where($rightcol . " = " . $leftcol . " +1");
$this->db->order_by($leftcol);
$query = $this->db->get($this->table_name);

codeigniter 查询输出是什么

SELECT *
FROM `ci_nest`
WHERE `lft` > 9 AND `rgt` < 28
AND `rgt` = `lft` `+1`
ORDER BY `lft`

正如您在该行中看到的那样,rgt = lft + 1 被 codeigniter 3 查询构建器错误地格式化。

对此问题的任何解决方法将不胜感激。

【问题讨论】:

  • $this-&gt;db-&gt;where($rightcol . " = " . $leftcol . '+1');
  • 嘿 Nithin,如果您有解决方案,请将其发布为答案而不是评论

标签: php mysql codeigniter


【解决方案1】:

通过可选的第三个参数禁用反引号并由您自己创建。

$this->db->where($rightcol, '`'.$leftcol.'`+1', FALSE);

或者用双引号,似乎更好。

$this->db->where($rightcol, "`$leftcol`+1", FALSE);

【讨论】:

  • 谢谢,我忘了可选的第三个参数
【解决方案2】:

目前我发现的一个快速解决方法是使用 Codeigniter 3 查询方法而不是查询生成器。

$query = $this->db->query("SELECT * FROM `{$this->table_name}` WHERE 
`{$leftcol}` > {$leftval} AND `{$rightcol}` < {$rightval} AND
`{$rightcol}` = `{$leftcol}` + 1 ORDER BY `{$leftcol}`");

【讨论】:

    【解决方案3】:

    试试这个:

    $this->db->where($leftcol . ' > ' . $leftval . ' AND ' . $rightcol . ' < ' . $rightval);
    $this->db->where($rightcol . " = " . $leftcol + 1);
    $this->db->order_by($leftcol);
    $query = $this->db->get($this->table_name);
    

    【讨论】:

    • 查询生成器输出是 SELECT * FROM ci_nest WHERE lft > 22 AND rgt lft 。正在构建的查询是错误的,但感谢您尝试
    猜你喜欢
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多