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

时间:2018-08-27 14:22:52

标签: php mysql pdo

我遇到以下错误:

:'<,'>w !xclip -i

这是发生代码的地方:

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

当名称中带有破折号(-)时,将出现问题。当名称为“普通”(不带破折号)时,它将起作用。

我尝试了此问题(PDO and UTF-8 Special characters in PHP / MySQL?)的解决方案,但这不起作用。

有人知道吗?

谢谢!

编辑

@lonesomeday答案有效,但是我找到了另一个解决方案。通过将“ IN BOOLEAN MODE”更改为“ IN NATURAL LANGUAGE MODE”,错误消失了。

1 个答案:

答案 0 :(得分:4)

问题是IN BOOLEAN MODE全文搜索。搜索字符串中的字符-(以及several others)具有特殊含义(搜索中不包含单词)。我认为,您的错误是由一个-字符引起的,该字符前面紧跟一个单词,中间没有空格。

无论如何,-不会像其他运算符一样成为搜索的一部分,因此最简单的方法是将其与其他运算符一起剥离。

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

仅当您确实希望在此上下文中使用它们的特定含义时,才包括这些字符。