2016-12-29 37 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 '*' 

我不明白這一點,我使用參數化查詢,它會自動採取這樣的情況下照顧... ?我不想最終剝離所有非字母數字字符或測試,這確實會導致問題,但我沒有想法。

回答