gpt4 book ai didi

php - 使用带有单词边界的 MySQL 和 REGEX 的 Codeigniter Query Builder 增加了额外的空间

转载 作者:行者123 更新时间:2023-11-29 02:45:22 27 4
gpt4 key购买 nike

对于这个问题,我真的很想尽可能避免修改核心文件,因此解决方法会非常有用。

REGEX 很容易与“where”查询构建器类一起使用,但是使用单词边界会通过添加额外的空格来打破它。

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 FROM table WHERE LOWER(otherColumn) REGEXP '[[:<:]]billy[[:>:]]';

实际结果:

SELECT column FROM table WHERE LOWER(otherColumn) REGEXP [[: < :]]billy[[:>:]]';

这是特定堆栈的特定问题,我还没有发现任何人遇到同样的问题。我试过转义冒号、<'s、方括号,似乎没有任何效果。或者它添加额外的反斜杠。

此时任何帮助或指导都会有所帮助。

提前致谢。

最佳答案

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在<前后加了空格编译查询时,我不知道为什么,但确实如此。我已经转义了变量 $sq 的值减轻注入(inject)攻击或相同。因此,将第三个参数添加到 where用作false以防止它重新转义和添加空格。

我还没有使用过其他版本的 codeigniter。我希望这会奏效。

有关 MySQL 的更多信息 REGEXP访问此链接:MySQL 5.6 Reference Manual - Regular Expressions

关于php - 使用带有单词边界的 MySQL 和 REGEX 的 Codeigniter Query Builder 增加了额外的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43287982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com