codeigniter 左连接不换行
Posted
技术标签:
【中文标题】codeigniter 左连接不换行【英文标题】:codeigniter left join without wrapping character 【发布时间】:2015-05-12 07:50:59 【问题描述】:我在 Codeigniter 中生成查询时遇到问题。问题是
$this->db->select('user.*')
->join('user_group', 'user.group_id BETWEEN user_group.start_range AND user_group.end_range', 'left');
此代码生成以下查询:
SELECT `user`.* FROM (`user`) LEFT JOIN `user_group` ON `user`.`group_id` `BETWEEN` user_group.start_range AND user_group.end_range
这里,mysql无法识别引号字符内的BETWEEN
,如何在不使用引号字符换行的情况下生成查询。请给我任何建议。
我正在使用 codeigniter 2.2.0
【问题讨论】:
您需要使用 >= 和 db->select('user.*' ) ->join('user_group', 'user.group_id >= user_group.start_range AND user.group_id 好吧,CI 2.2.x 没有转义标志作为连接的第四个参数(用于转义值和标识符),而在 CI 3.0 中,它有。因此,如果您使用 CI 2.2.0,则需要遵循 imran qasim 的建议! 感谢您的帮助,imran qasim 提供的解决方案工作正常 【参考方案1】:您需要覆盖CI_DB_driver
类中的$_reserved_identifiers
变量,使其如下所示
var $_reserved_identifiers = array('*', 'BETWEEN'); // Identifiers that should NOT be escaped
(注意我不确定这是否会降低安全性)
https://github.com/bcit-ci/CodeIgniter/blob/2.2-stable/system/database/DB_driver.php#L67
另一个选项是使用 >=
和 <=
复制 between 运算符
【讨论】:
以上是关于codeigniter 左连接不换行的主要内容,如果未能解决你的问题,请参考以下文章