)时出现php-pdo错误

kxkpmulp  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(351)

我有以下错误:

Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 syntax error, unexpected '-'

这是一段代码:

$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();

如果名称中有破折号(-),则会出现问题。当名称为“normal”(不带破折号)时,它起作用。
我尝试了这个问题的解决方案(php/mysql中的pdo和utf-8特殊字符?)。
有人有主意吗?
提前谢谢!

编辑

@lonesomeday答案有效,但我找到了另一个解决方案。通过将“in boolean mode”更改为“in natural language mode”,错误消失了。

j8ag8udp

j8ag8udp1#

问题在于 IN BOOLEAN MODE 全文搜索。人物 - 在搜索中,字符串(以及其他几个字符串)具有特殊含义(不包括搜索中的单词)。我认为你的错误是因为 - 前面有单词的字符,中间没有空格。
不管怎样 - 在任何情况下都不会像其他操作符一样成为搜索的一部分,因此最简单的方法是将它与其他操作符一起剥离出来。

$name = str_replace(['-', '+', '<', '>', '(', ')', '~', '*', '\'', '"'], ' ', $name);

只有当你真的希望这些字符在这个上下文中有特定的含义时,才包括这些字符。

相关问题