有了这个问题,我真的希望尽可能避免修改核心文件,因此解决方法会非常有用。
REGEX适用于'其中'查询构建器类很容易,但使用单词边界通过添加额外的空间来打破它。
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');
预期结果:
SELECT
column
FROMtable
WHERE LOWER(otherColumn)REGEXP &#39; [[:其中:]]比利[[产品:&gt;:]]&#39 ;;
实际结果:
SELECT
column
FROMtable
WHERE LOWER(otherColumn)REGEXP [[:&lt; :]]比利[[产品:&gt;:]]&#39 ;;
这是一个特定堆栈的特定问题,我还没有发现任何人遇到同样的问题。我试过逃避冒号,方括号,似乎没什么用。或者它增加了额外的反斜杠。
此时任何帮助或指示都会有所帮助。
提前致谢。
答案 0 :(得分:1)
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
,以防止它重新转义和添加空格。
我没有经历过其他版本的codeigniter。我希望这会奏效。
有关MySQL REGEXP
的详细信息,请访问此链接:MySQL 5.6 Reference Manual - Regular Expressions