複数の 'AND'条件を持つ 'IN'句

2016-10-06 12 views
0

私に間違った結果を返すSQLクエリがあります。ここ複数の 'AND'条件を持つ 'IN'句

" SELECT * FROM directory WHERE '".$_REQUEST['occupation']."' IN (occupation,pro_cat1,pro_cat2,pro_cat3,pro_cat4,pro_cat5) AND state = '".$_REQUEST['state']."' AND city = '".$_REQUEST['city']."' AND status = 1 ORDER BY rand() " 

私はoccupationが(もANDと連結WHEREにいくつかのより多くの句を添加しながら)IN句に設けられた6つの値の一つであるかどうかを確認します。

私は結果を返しますが、間違っています。どこが間違っていたのですか?

+0

「それは私に結果を与えているが、適切な結果ではない」結果はどういうものではないのですか? –

+0

すべての職業でそれを検索していない、pro_cat1、pro_cat2、pro_cat3、pro_cat4、pro_cat5 –

+0

あなたはSQLインジェクション攻撃の脆弱性があります。私は準備された声明について読むことをお勧めします。 –

答えて

4

あなたが探している値が文字列である場合は、それらを引用する必要があります。

... IN ('occupation','pro_cat1','pro_cat2','pro_cat3','pro_cat4','pro_cat5') ... 
     ^here ^etc. 

ます。また、直接クエリに変数を挿入することはありません。代わりに、変数にプレースホルダ付きの準備文を使用する必要があります。

(それらが予約語である場合を除きなど、スペースを含む)。また、カラム名を引用符で囲むべきではありませんが、あなたがそれらを引用する必要がある場合は、バックティックを使用する必要があります。

... directory where `".$_REQUEST['occupation']."` IN ... 
        ^here     ^

はまたことに注意してください表名と列名は準備できませんので、クエリーに挿入する前に必ずホワイトリストにする必要があります。

+0

はいその文字列ですが、機能していません –

+0

@Siddharthvyas列名について私の編集を参照してください。 – jeroen

関連する問題