有了这个问题,如果可能的话,我真的希望避免修改核心文件,所以解决方法会非常有用。
REGEX很容易与“where”查询生成器类一起工作,但是使用单词boundaries可以通过添加额外的空格来打破它。

function search($searchQuery){
    $sq = '[[:<:]]'.strtolower($searchQuery).'[[:>:]]';
    $this->db->select('column');
    $this->db->from('table');
    $this->db->where('LOWER(otherColumn) REGEXP', $sq);
    echo $this->db->get_compiled_select();
}

search('billy');

预期结果:
column中选择table其中较低的(otherColumn)REGEXP
'[[::]]';
实际结果:
column中选择table其中较低的(otherColumn)REGEXP
[[::]]';
对于一个特定的堆栈,这是一个非常特殊的问题,我没有发现任何人遇到过相同的问题。我试着摆脱冒号、在这一点上,任何帮助或指导都是有帮助的。
提前谢谢。

最佳答案

function search($searchQuery){
    $sq = $this->db->escape('[[:<:]]'.strtolower($searchQuery).'[[:>:]]');
    $this->db->select('column');
    $this->db->from('table');
    $this->db->where('LOWER(otherColumn) REGEXP ', $sq, false);
    echo $this->db->get_compiled_select();
}

search('billy');

对于Codeigniter v 3.1.6和MySQL v5.6
仅仅因为Codeigniter在编译查询时在<前后添加了空间,我不知道为什么,但它确实添加了空间。我已经对变量$sp的值进行了转义,以减轻注入攻击或相同的攻击。因此添加了第三个参数false,以防止它重新转义和添加空格。
我还没有看过其他版本的代码点火器。我希望这能奏效。
有关MySQLREGEXP的更多信息,请访问以下链接:MySQL 5.6 Reference Manual - Regular Expressions

10-04 10:57