Ошибка PDO при использовании тире (-) в переменной - PullRequest
0 голосов
/ 27 августа 2018

У меня следующая ошибка:

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 и специальные символы UTF-8 в PHP / MySQL? ), но это не работает.

У кого-нибудь есть идея?

Заранее спасибо!

Редактировать

@ loneomeday ответ работает, но я нашел другое решение. При изменении «В БУЛЕВОМ РЕЖИМЕ» на «В РЕЖИМЕ ЕСТЕСТВЕННОГО ЯЗЫКА» ошибка исчезла.

1 Ответ

0 голосов
/ 27 августа 2018

Проблема в IN BOOLEAN MODE полнотекстовом поиске. Символ - в строке поиска (наряду с , несколько других ) имеет особое значение (исключая слово из поиска). Я думаю, что ваша ошибка связана с тем, что у вас есть символ -, перед которым стоит сразу слово, без пробела.

В любом случае, - не будет частью поиска в любом случае, как и другие операторы, поэтому самый простой подход - удалить его вместе с другими операторами.

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

Включайте эти символы только в том случае, если вы действительно хотите, чтобы они имели конкретное значение в этом контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...