Dit is helaas een rare uitzondering op het gebruik van queryparameters (edit: maar blijkbaar niet in de meest recente punt-release van elke MySQL-tak, zie hieronder).
Het patroon in AGAINST()
moet een constante tekenreeks zijn, geen queryparameter. In tegenstelling tot andere constante tekenreeksen in SQL-query's, kunt u hier geen queryparameter gebruiken, simpelweg vanwege een beperking in MySQL.
Om zoekpatronen veilig in zoekopdrachten te interpoleren, gebruikt u de PDO::quote() functie. Merk op dat de functie quote() van PDO al de scheidingstekens voor aanhalingstekens toevoegt (in tegenstelling tot 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");
Re reactie van @YourCommonSense:
Je hebt gelijk, ik heb dit zojuist getest op MySQL 5.5.31, 5.1.68 en 5.0.96 (MySQL Sandbox is een geweldig hulpmiddel), en het lijkt erop dat deze versies wel queryparameters accepteren in de AGAINST()-clausule van een dynamische SQL-query.
Ik herinner me nog een conflict uit het verleden. Misschien is het gecorrigeerd in de meest recente punt-release van elke branch. Ik vind bijvoorbeeld deze gerelateerde bugs:
- Het gebruik van een opgeslagen procedureparameter in de AGAINST()-clausule geeft altijd hetzelfde resultaat:http://bugs.mysql.com/bug.php?id=3734
- Crash of vreemde resultaten met voorbereide verklaring, MATCH en FULLTEXT:http:// bugs.mysql.com/bug.php?id=14496