我在 Sphinx PHP API 代码中找到了以下函数:
function sphinxapi_EscapeString($string)
{
$from = ['\\', '(', ')', '|', '-', '!', '@', '~', '"', '&', '/', '^', '$', '=', '<'];
$to = ['\\\\', '\(', '\)', '\|', '\-', '\!', '\@', '\~', '\"', '\&', '\/', '\^', '\$', '\=', '\<'];
return str_replace($from, $to, $string);
}
但是,它似乎无法正常工作,因为当我在查询中使用带有某些字符的字符串时,Sphinx 会引发异常。
一个例子是引号字符"
。EscapeString()
在它前面放一个反斜杠\
,但是 Sphinx 抛出一个异常说:
致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突:1064 index my_index:语法错误,在..
如果我再添加两个反斜杠,使其成为\\\"
,则不会引发错误。
这是怎么回事?为什么不EscapeString()
工作?