残念ながら、これはクエリパラメータの使用に対する奇妙な例外です(編集: ただし、各MySQLブランチの最新のポイントリリースには含まれていないようです。以下を参照してください)。
AGAINST()
のパターン 必須 クエリパラメータではなく、定数文字列である必要があります。 SQLクエリの他の定数文字列とは異なり、MySQLの制限のため、ここではクエリパラメータを使用できません。
検索パターンをクエリに安全に補間するには、 PDO ::quote()> 働き。 PDOのquote()関数はすでに引用区切り文字を追加していることに注意してください(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