Я пытаюсь заставить поисковый сервер Sphinx работать с PDO, но он вызывает синтаксическую ошибку при использовании функции MATCH () в определенных сценариях.
Ex:.
В моем коде я разделяю поисковый запрос по пробелам, а затем объединяю его, используя оператор |
(OR). Если кто-то наберет test > 3
, в функции сопоставления он станет (test | > | 3)
. Эта комбинация вызывает: Syntax error or access violation: 1064 main_idx: syntax error, unexpected '|' near ' > | 3'
. Я не думаю, что это проблема побега, потому что символ >
отсутствует в списке побега, и даже если вы попытаетесь его избежать, он не сработает. Это ошибка в версии Sphinx, которую я использую? Или я что-то не так делаю?
Я использую Sphinx версии 2.2.11. На самом деле это экземпляр докера, представленный этим образом: jamesrwhite / sphinx-alpine: 2.2.11
Версия PHP - 7.2.
Это мой нерабочий код:
$searchQuery = "SELECT * FROM main_idx WHERE MATCH(:search)";
$dbh = new PDO('mysql:host=127.0.0.1;port=9306', 'root', 'root');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->prepare($searchQuery);
$stmt->bindValue('search', 'test | > | 3');
$stmt->execute();
Тот же код отлично работает, если я использую расширение MySQLi. Он также отлично работает с PDO и Sphinx версии 2.2.6. Должно быть что-то изменилось между 2.2.6 и 2.2.11. Кто-нибудь сталкивался с этой проблемой?