2016-05-02 16 views
1

私は、例えば、投稿された値に基づいてクエリを実行しています。クエリ今Sql:投稿された値に基づいてSQLクエリを更新します。

$query= mysqli_query($connect, 
       "SELECT * FROM residential WHERE type='$type' AND unit_type='$unit_type' " 
       . "AND price BETWEEN '$min_price' AND '$max_price' " 
       . " AND bedrooms BETWEEN '$min_bedrooms' AND '$max_bedrooms'"); 

$unit_type , $min_price etc are coming from $_POST arrayがされ、次の、私の問題は、私は、クエリで使用される値($type ,$max_bedrooms, $min_bedrooms etc)のいずれかを受信しない場合、クエリは動作しないということです。私の質問は、投稿された値だけに基づいてクエリを更新する方法です。

+0

ことによってそれを変更します。三元演算子でも動作します。これについて多くの方法があります。 –

+0

MySqlまたはSQL Serverですか?彼らは同じではありません.... –

+0

クエリの文字列の変数の代わりにSQLインジェクション、あなたのクエリのパラメータを使用してください – Preuk

答えて

3

は、あなたがNULL値を受け入れ、おそらく空のままならば、デフォルト値を使用するためにこれらの列を持つことができます$クエリー変数を使用してあなたのポストの値

$query= "SELECT * FROM residential WHERE 1=1 "; 
if($type!=""){ 
$query.=" AND type='$type'"; 
} 
if($unit_type!=""){ 
$query.=" AND unit_type='$unit_type'"; 
} 
if(($min_price!="") && ($max_price!="")){ 
$query.=" AND price BETWEEN '$min_price' AND '$max_price' "; 
} 
if(($min_bedrooms!="") && ($max_bedrooms!="")){ 
$query.=" AND bedrooms BETWEEN '$min_bedrooms' AND '$max_bedrooms'"; 
} 
$result= mysqli_query($connect,$query); 
+0

なぜ1 = 1を使用する必要がありますか? – Sikander

+0

その値が投稿されていない場合は、すべての値が表示されます –

+2

他のすべての条件でANDを使用できます。WHERE句でWHERE句を使用する必要があります。 – Jimmmy

2

クエリに変数を入れる前に、いくつかの検証を実行できます。ここでは、varsが送信されているかどうか(および有効なタイプなど)を確認できます。そうでない場合は、デフォルト値に置き換えることができます。

これを行う別の方法があります。クエリでは、値が存在しない場合にデフォルト値を指定するCOALESCE()関数を使用できます。例:COALESCE( '$ unit_type'、 'coin')。

コメントに記載されているとおり、SQLインジェクションに注意する必要があります。送信された変数をエンコードする&を厳密に検証するか、またはSQLクエリを作成するために準備されたステートメントを使用することで回避できます(dibi、pdo ..)。

はそれが役に立てば幸い:)

関連する問題