2011-09-19 96 views
3
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's和%是什么意思? 干杯。PHP帮助解释函数

回答

4

在SQL LIKE表达式中,_装置任何单个字符,和%手段任何字符

  • 逸出%_字符以除去它们的特殊含义(添加\他们除去它们的特殊含义之前)
  • 第二行反转义,是由一个preceeded的%_字符的第一行NULL字节(char(0))。

在str_replace中使用数组允许一次执行多个替换。

+0

谢谢你的解释 –

2

%和_用于SQL语句中,它们是通配符。 %匹配任何一组字符,而_匹配单个字符。

有\%意味着它不会匹配任何字符,它会转义它,所以它现在是一个文字,同样也是_。

+1

今天我才知道_是单个字符的通配符。 – jasonbar

2

这是一个非常可靠和不可靠的SQL转义方法。找到谁写了这些,并用一条臭鱼粘鱼几个小时。

总之,它做1:1更换两个阵列的:

_ -> \_ 
% => \% 

,然后用字符串,其中有(由于某种原因)之前的原始字符串的临界值的NULL字符是相同的。

+1

你可能应该向班级解释为什么它很可靠/不可靠。 – webbiedave

+0

谢谢你的回答。帮助我很多。我同意webbiedave虽然 –

+1

它不会逃避'\'字符。当'%'被'\%s'替换时,''foo \%'''变成''foo \\%“''。结果''%'实际上没有逃脱。此外,它假定该字符串不能包含恶意的NULL。 – arnaud576875