Escape-строка для использования в полнотекстовом поиске MySQL

Я использую Laravel 4 и настроил следующий запрос:

if(Input::get('keyword')) {
    $keyword = Input::get('keyword');
    $search = DB::connection()->getPdo()->quote($keyword);
    $query->whereRaw("MATCH(resources.name, resources.description, resources.website, resources.additional_info) AGAINST(? IN BOOLEAN MODE)", 
        array($search)
    );
}

Однако этот запрос работает нормально при обычном использовании, если пользователь вводит строку, такую ​​как++выдается ошибка. Глядя наMySQl документыЕсть несколько ключевых слов, таких как+ а также- которые имеют конкретные цели. Есть ли функция, которая исключает эти типы специальных символов из строки, чтобы ее можно было использовать в полнотекстовом поиске, как описано выше, без каких-либо ошибок?

Вот пример ошибки, которая выдается:

{"error":{"type":"Illuminate\\Database\\QueryException","message":"SQLSTATE[42000]: Syntax error or access violation: 1064 syntax error, unexpected '+' (SQL: select * from `resources` where `duplicate` = 0 and MATCH(resources.name, resources.description, resources.website, resources.additional_info) AGAINST('c++' IN BOOLEAN MODE))","file":"\/var\/www\/html\/[...]\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Connection.php","line":555}}

Решения, которые я пробовал:

$search = str_ireplace(['+', '-'], ' ', $keyword);

$search = filter_var($keyword, FILTER_SANITIZE_STRING);

$search = DB::connection()->getPdo()->quote($keyword);

Я предполагаю, что мне нужно будет использовать регулярные выражения. Какой лучший подход здесь?

Ответы на вопрос(1)

Ваш ответ на вопрос