2011-02-07 20 views
0

エスケープ文字列に同じ値を複数回挿入することはできますか?すなわちSQL文字列エスケープ質問

$wpdb->prepare("SELECT * FROM table WHERE (column1 = %s || column2 = %s || column3 = %s) AND this = $s", $search_terms,$that"); 

もしそうでなければ、誰でも条件作成者の良い選択肢がありますか? SQLは、選択されたテーブルに対して複数回実行されます。いくつかの表には他の列よりも多くの列が検索されるため、条件作成ツールを作成しました。しかし、今私はSQLインジェクションを防ぐために値をエスケープしようとしています。

$conditions = ""; 
       $query_seperator = " || "; 
       $i = 0; 
       foreach($table['fields'] as $field){ 

        if ($i < ($field_count-1)){ 
         $conditions = $conditions . $field . " LIKE %s" . $query_seperator; 
        } else { 
         $conditions = $conditions . $field . " LIKE %s"; 
        } 

        $i++; 
       } 

$wpdb->prepare("SELECT * FROM table WHERE ($conditions) AND this = $s", $search_terms,$that"); 

答えて

0

あなたのクエリは、あなたがそれを行うカント

$wpdb->prepare("SELECT * FROM table WHERE %s IN (column1,column2,column3) AND this = $s", $search_terms,$that"); 
+0

と同等であると考えられます。どこで検索文字列のみ。検索列はありません。しかし、応答ありがとう。 – madphp

+0

試しましたか?それは私のサーバー上で完全にうまく動作するからです。 'IN()'は複数の 'OR'文のショートカットに過ぎず、MySQLはクエリをコンパイルする前にこのフォームに書き換えます。 – Mchl

+0

私は試してみました。確かに私はもう一度やり直すつもりです。 – madphp