首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SphinxQL()函数不适用于SphinxQL?

SphinxQL()函数不适用于SphinxQL?
EN

Stack Overflow用户
提问于 2015-03-22 15:45:24
回答 1查看 591关注 0票数 0

我在Sphinx代码中找到了以下函数:

代码语言:javascript
复制
function sphinxapi_EscapeString($string)
{
    $from = ['\\', '(', ')', '|', '-', '!', '@', '~', '"', '&', '/', '^', '$', '=', '<'];
    $to   = ['\\\\', '\(', '\)', '\|', '\-', '\!', '\@', '\~', '\"', '\&', '\/', '\^', '\$', '\=', '\<'];

    return str_replace($from, $to, $string);
}

但是,它似乎不能正常工作,因为当我在查询中使用带有特定字符的字符串时,Sphinx会抛出异常。

一个例子是引号字符"EscapeString()在它前面放了一个反斜杠\,但是狮身人面像抛出一个异常,上面写着:

致命错误:异常'PDOException‘与消息'SQLSTATE42000:语法错误或访问冲突: 1064索引my_index:语法错误,未预料到的$end在’‘in。

如果我再添加两个反斜杠,使其为\\\",则不会引发错误。

这里怎么回事?为什么EscapeString()不能工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-23 11:06:03

您没有共享确切的代码,但我想知道您是否只是调用这个函数,是否也需要按照SQL规则进行转义。

EscapeString只转义查询以转义扩展的语法字符。

这就是API中所需要的,因为Query/AddQuery函数直接接受查询。

但在SphinxQL中,查询字符串位于SQL语句中,因此该字符串在嵌入到语句之前需要“string”转义(不管您是否也像EscapeString那样转义)。如果使用准备好的语句,则PDO可以自动执行,否则使用PDO quote函数。

(像SELECT ... MATCH('one \" ')这样的查询不会直接转义,因为斜杠被SQL解析器“吞没”,而不是通过全文查询解析器)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29196362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档