我有以下错误:
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();当名称中有一个破折号(-)时,问题就出现了。当名称是“正常”(没有破折号),它工作。
我在这个问题(PHP / MySQL中的PDO和UTF-8特殊字符?)中尝试了这个解决方案,但这是行不通的。
有什么主意吗?
提前感谢!
编辑
@lonesomeday的答案有效,但我找到了另一个解决方案。通过将“IN BOOLEAN模式”改为“IN天然语言模式”,错误消失了。
发布于 2018-08-27 14:34:58
问题是IN BOOLEAN MODE全文搜索。搜索字符串中的字符- (以及其他几个)有一个特殊的含义(不包括搜索中的一个单词)。我认为,您的错误来自于在前面有一个单词的-字符,没有中间的空格。
无论如何,-在任何情况下都不会成为搜索的一部分,就像其他操作符一样,所以最简单的方法就是将它和其他操作符一起去掉。
$name = str_replace(['-', '+', '<', '>', '(', ')', '~', '*', '\'', '"'], ' ', $name);只有当您真正想要这些字符在这个上下文中的特定含义时,才能包含这些字符。
https://stackoverflow.com/questions/52041432
复制相似问题