Това за съжаление е странно изключение от използването на параметри на заявката (редактиране: но очевидно не в най-новата версия на точка на всеки клон на MySQL, вижте по-долу).
Моделът в AGAINST()
трябва бъде постоянен низ, а не параметър на заявката. За разлика от други константни низове в SQL заявки, тук не можете да използвате параметър на заявка, просто поради ограничение в MySQL.
За безопасно интерполиране на модели за търсене в заявки, използвайте PDO::quote() функция. Имайте предвид, че функцията quote() на PDO вече добавя разделителите на кавички (за разлика от mysql_real_escape_string()).
$quoted_search_text = $this->db->quote('+word +word');
$sql = $this->db->prepare("SELECT ... FROM search_table
WHERE MATCH(some_field) AGAINST($quoted_search_text IN BOOLEAN MODE");
Повторен коментар от @YourCommonSense:
Прав си, току-що тествах това на MySQL 5.5.31, 5.1.68 и 5.0.96 (MySQL Sandbox е прекрасен инструмент) и изглежда, че тези версии приемат параметри на заявката в клаузата AGAINST() на динамична SQL заявка.
Все още си спомням за конфликт, съществуващ в миналото. Може би е коригиран в най-новата точка-релиз на всеки клон. Например намирам следните свързани грешки:
- Използването на параметър на съхранена процедура в клаузата AGAINST() винаги връща един и същ резултат:http://bugs.mysql.com/bug.php?id=3734
- Срив или странни резултати с подготвено изявление, MATCH и FULLTEXT:http:// bugs.mysql.com/bug.php?id=14496