2016-09-11 4 views
-1

私は自分のウェブサイトでサーチャーをしています。私は選択したクエリーに必要なすべての制約を含める必要があります。サブクエリMY SQL

私の検索者は、キーワードを書いたり、最低価格と最高価格を書いたり、いくつかのカテゴリの中から選択することができますが、すべてのフィールドを入力して検索する必要はありませんすべてを満たすか、ただ一つで満たすことで見つけることができるように、私はそれを分離するためにconstraitをしなければならない。

私が何かしようとしている:私は、ユーザーが選択した任意のカテゴリを返すようにしたいので、私は余分な問題を抱えているので、まずそれはクエリを継続することとすることがあるが、

ここ
$var1 = $_POST['var1']; //name - type = text 
$var2 = $_POST['var2']; //min price - type = integer 
$var3 = $_POST['var3']; //max price - type = integer 
$var4 = $_POST['var4']; //array of categories 

$select_query = "SELECT * FROM objects WHERE x=1"; 

if($var1 != NULL || $var1 != ''){ 
"AND name like '%$var1%'" 
} 

if(($var2 != NULL || $var2 != '') AND ($var3 != NULL || $var3 != '')){ 
"AND price=>$var2 AND price =>$var3'" 
} 

をそれはカテゴリー間のORでなければならないが、問題は最後のものが失敗することである。

if($var4 != NULL || $var4 != ''){ 
     " AND("; 
     foreach $var4 as $cat){ 
     "id_category = $cat OR"; 
     } 
     ")"; 
    } 

任意のヒント?ありがとう!

+0

ちょうどあなたのコードを見て、それをテストしないことによって、最後の部分が常に終わるので、最後の部分が失敗しているようです。あなたは文法エラーの原因となる '... AND(id_category = $ cat OR id_category = $ cat OR)'のようなものを得ます –

+0

フィールド名はdb列名に対応していますか? – RamRaider

+0

はい、それは問題の1つですが、どうすれば解決できるのか分かりません。 @RamRaiderはいそうです! –

答えて

0

は、PHPの破機能を使用してみてください:

" AND(" . implode("OR ", $var4) . ")" 

あなたは、$ varが空でない配列であることを確認したいと思います。

また、SQLインジェクションをよく読んでくださいとデータベースとの対話あなたのコードが安全であるように、どのように適切にPHPとSQLクエリをエスケープする:

http://php.net/manual/en/security.database.sql-injection.php

http://php.net/manual/en/pdo.prepared-statements.php

+0

ありがとうございましたが、私は間違った質問をしていました! –

0

おかげで、私間違った質問をしていた!

ソリューションでした:

$select_query = "SELECT * FROM objects WHERE x=1"; 

if($var1 != NULL || $var1 != ''){ 
$select_query = "AND name like '%$var1%'" 
} 

私はのために最後の例をしました。

ありがとうございました!