sql >> データベース >  >> RDS >> Mysql

PDOおよびMySQL全文検索

    残念ながら、これはクエリパラメータの使用に対する奇妙な例外です(編集: ただし、各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クエリ。

    私はまだ過去に存在した紛争の記憶を持っています。多分それは各ブランチの最新のポイントリリースで修正されました。たとえば、次の関連するバグを見つけました:



    1. SQL Serverで1か月の日数を確認するにはどうすればよいですか?

    2. ORDER BY DATEは、最初にNULLSを表示し、次に最新の日付を表示します

    3. Node.js MySQL-エラー:ECONNREFUSEDに接続します

    4. MicrosoftAccessIDEに愛を与える時が来ました