2017-10-09 17 views
0

多分これは簡単な質問ですが、私は答えを見つけるのに苦労しています。MYSQL:ユーザ入力に基づくフィルタクエリ

テーブルartcategory,subjectmediumのフィールド値に基づいてフィルタ機能を実装しようとしています。ユーザーが選択した場合のみcategory結果は、ユーザーがcategorysubjectを選択した場合、それは

SELECT * FROM ART WHERE category=val AND subject=val

とそうでなければなりませんが、私はどのようにしませんクエリ SELECT * FROM ART WHERE category=val

ことを意味します

私は動的にこのクエリを構築する1つのアプローチはすべての可能な組み合わせのクエリを作成し、条件に基づいて実行するが、私は良いアプローチだとは思わない

+0

この問題を解決するために何を試みたのですか? –

+0

質問に私のアプローチを言及 – Jabaa

+0

あなたはそのためのコードを書いていましたか? –

答えて

1
$sql=" SELECT * FROM ART where 1=1 "; 

if(!empty($category) { 
    $sql.=" and category= $value"; 
} 

if(!empty($subject) { 
    $sql.=" and subject= $value"; 
} 

if(!empty($medium) { 
    $sql.=" and medium= $value"; 
} 

以下のようにWHERE条件ですべてのフィルタを試してみてくださいあなたは3つのチェックのすべてをどこに追加することはできません(誤ったSQL文字列を作るでしょう)。

SQLインジェクションについて読む。パラメータバインディングを使用してパラメータを追加してください。これはあなたのアイデアを得るためのものですが、これはうまくいくがSQLインジェクションに対して脆弱です

+0

私はこの 'where 1 = 1'で苦労しました。 – Jabaa

0

はとORないと

= 1 1は、ちょうどあなたがどこに応じとして追加するためのいくつかのログインを持っている必要があり、他の正しい構文を維持することです
SELECT * FROM ART WHERE category=val OR subject=val OR medium=val; 
関連する問題