2016-12-29 19 views
1

全文検索クエリに問題があります。 Symfony(2.8)コントローラの内部から送信されています(重要な場合)。コードはSymfony/MySQL:特殊文字の全文検索構文エラー

// not processed text (apart from multiple spaces) from form: 
$searchTerm = preg_replace('!\s+!', ' ', trim($data['query'])); 
// for full-text search: 
$searchTermPhrase = str_replace(' ', '* ', $searchTerm) . '*'; 

$entityManager = $this->getDoctrine()->getManager(); 
// as far as I remember, query taken from StackOverflow after some tests 
$statement = $entityManager->getConnection() 
          ->prepare(
          "SELECT COUNT(id) AS books_count 
           FROM book 
           WHERE 
           MATCH(title) AGAINST (:searchTermPhrase IN BOOLEAN MODE) > 5 
           AND active = true 
           "); 
$statement->execute(array('searchTermPhrase' => $searchTermPhrase)); 

$titlesCount = $statement->fetch(); 
$titlesCount = $titlesCount['books_count']; 

です。ほとんどの時間。ユーザが内部いくつかの特別な文字を入れた場合でも、などの例(title)"title"のために、それは失敗します。

SQLSTATE[42000]: Syntax error or access violation: 
1064 syntax error, unexpected $end, expecting 
FTS_TERM or FTS_NUMB or '*' 

私はそれを得ることはありませんが、私はパラメータ化クエリを使用すると、自動的にそのような場合の世話をする必要があります... ?私はすべての英数字以外の文字を削除したり、問題を引き起こしているテストを終わらせたくないのですが、私はアイデアがありません。

答えて

0

これはInnoDBの問題です。このレポートhttps://bugs.mysql.com/bug.php?id=72605を参照してください。私は同じ問題に直面して、エンジンをMyISAMに変更して動作させた。