Sayangnya, ini adalah pengecualian aneh untuk penggunaan parameter kueri (edit: tetapi tampaknya tidak dalam rilis poin terbaru dari setiap cabang MySQL, lihat di bawah).
Pola di AGAINST()
harus menjadi string konstan, bukan parameter kueri. Tidak seperti string konstan lainnya dalam kueri SQL, Anda tidak dapat menggunakan parameter kueri di sini, hanya karena keterbatasan dalam MySQL.
Untuk menginterpolasi pola penelusuran ke dalam kueri dengan aman, gunakan PDO::quote() fungsi. Perhatikan bahwa fungsi quote() PDO sudah menambahkan pembatas kutipan (tidak seperti 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");
Komentar ulang dari @YourCommonSense:
Anda benar, saya baru saja menguji ini di MySQL 5.5.31, 5.1.68, dan 5.0.96 (MySQL Sandbox adalah alat yang luar biasa), dan tampaknya versi ini menerima parameter kueri dalam klausa AGAINST() dari a kueri SQL dinamis.
Saya masih ingat konflik yang ada di masa lalu. Mungkin sudah diperbaiki di point-release terbaru dari masing-masing cabang. Misalnya, saya menemukan bug terkait ini:
- Menggunakan parameter prosedur tersimpan dalam klausa AGAINST() selalu mengembalikan hasil yang sama:http://bugs.mysql.com/bug.php?id=3734
- Hasil mogok atau aneh dengan pernyataan yang disiapkan, MATCH dan FULLTEXT:http:// bugs.mysql.com/bug.php?id=14496