function sql_like_expression($expression)
{
$expression = utf8_str_replace(array('_', '%'), array("\_", "\%"), $expression);
$expression = utf8_str_replace(array(chr(0) . "\_", chr(0) . "\%"), array('_', '%'), $expression);
return $this->_sql_like_expression('LIKE \'' . $this->sql_escape($expression) . '\'');
}
我不确定这个功能是做什么的。从我所看到的情况来看,我认为它会用_
取代\_
,但我不确定这些是不是正在发生的事情。为什么array
和%
是什么意思?
欢呼声。
答案 0 :(得分:4)
在SQL LIKE表达式中,_
表示任何单个字符,%
表示任何字符。
%
和_
字符以删除其特殊含义(在\
之前添加%
删除其特殊含义)_
和{{1}}个字符。在str_replace中使用数组允许一次进行多次替换。
答案 1 :(得分:2)
%和_在SQL语句中使用,它们是通配符。 %匹配任何字符集,而_匹配单个字符。
拥有\%意味着它不会匹配任何字符,它会逃脱它,因此它现在是一个文字,同样适用于_。
答案 2 :(得分:2)
这是一种非常狡猾且不可靠的SQL转义方法。找到那些写下来的人,然后用一条粘糊糊的鱼将它们打了几个小时。
简而言之,它正在以1:1的方式替换两个阵列:
_ -> \_
% => \%
然后与字符串相同,其中(由于某种原因)在原始字符串的临界值之前有一个NULL char。