首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在变量中使用破折号(-)时PDO错误

在变量中使用破折号(-)时PDO错误
EN

Stack Overflow用户
提问于 2018-08-27 14:22:51
回答 1查看 435关注 0票数 0

我有以下错误:

代码语言:javascript
复制
Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 syntax error, unexpected '-'

这是发生这种情况的代码段:

代码语言:javascript
复制
        $stmt = $db->prepare(
            "
                SELECT
                            product_id,
                            name                           
                FROM
                            products
                WHERE
                            MATCH(name) AGAINST(:name IN BOOLEAN MODE)

            "
        );  

        $stmt->bindParam(':name',$name,PDO::PARAM_STR);

        $stmt->execute();

当名称中有一个破折号(-)时,问题就出现了。当名称是“正常”(没有破折号),它工作。

我在这个问题(PHP / MySQL中的PDO和UTF-8特殊字符?)中尝试了这个解决方案,但这是行不通的。

有什么主意吗?

提前感谢!

编辑

@lonesomeday的答案有效,但我找到了另一个解决方案。通过将“IN BOOLEAN模式”改为“IN天然语言模式”,错误消失了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-27 14:34:58

问题是IN BOOLEAN MODE全文搜索。搜索字符串中的字符- (以及其他几个)有一个特殊的含义(不包括搜索中的一个单词)。我认为,您的错误来自于在前面有一个单词的-字符,没有中间的空格。

无论如何,-在任何情况下都不会成为搜索的一部分,就像其他操作符一样,所以最简单的方法就是将它和其他操作符一起去掉。

代码语言:javascript
复制
$name = str_replace(['-', '+', '<', '>', '(', ')', '~', '*', '\'', '"'], ' ', $name);

只有当您真正想要这些字符在这个上下文中的特定含义时,才能包含这些字符。

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

https://stackoverflow.com/questions/52041432

复制
相关文章

相似问题

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