我有以下错误:
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();
当名称中有破折号 (-) 时,就会出现问题。当名称为“正常”(没有破折号)时,它会起作用。
我尝试了这个问题的解决方案 ( PDO and UTF-8 Special characters in PHP / MySQL? ) 但它不起作用。
有什么想法吗?
提前致谢!
编辑
@lonesomeday 答案有效,但我找到了另一个解决方案。通过将“ bool 模式”更改为“自然语言模式”,错误消失了。
最佳答案
问题是 IN BOOLEAN MODE
全文搜索。搜索字符串中的字符 -
(连同 several others )具有特殊含义(从搜索中排除一个词)。我认为,您的错误来自于 -
字符前面有一个单词,中间没有空格。
在任何情况下,-
都不会像其他运算符一样成为搜索的一部分,因此最简单的方法是将它与其他运算符一起删除。
$name = str_replace(['-', '+', '<', '>', '(', ')', '~', '*', '\'', '"'], ' ', $name);
仅当您确实希望这些字符在此上下文中具有特定含义时才包含这些字符。
关于php - 在变量中使用破折号 (-) 时出现 PDO 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52041432/