有了这个问题,如果可能的话,我真的希望避免修改核心文件,所以解决方法会非常有用。
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
,以防止它重新转义和添加空格。我还没有看过其他版本的代码点火器。我希望这能奏效。
有关MySQL
REGEXP
的更多信息,请访问以下链接:MySQL 5.6 Reference Manual - Regular Expressions