2012-05-07 14 views
1

quicky one、私は検索クエリを作成していますが、このコードでは1つの問題が残っています。有効な検索クエリ

このコードは完全に動作していますが、このバリデーションを追加する必要があります。このバリデーションを追加すると問題が発生します。userid='$id'、検索クエリはそれで動作しません。誰かが私を正しい方法で置くことができますか?私はここで何かを逃している。 $ idの値は本当に真です。これはこの検索クエリのコード部分全体であり、結果は検証なしでOKです。

else if($_POST['filter1'] == "po_boravistu") 
     { 
      if($row_12['admin_id'] < 1) 
       { 
      //FILTER 10 po boravištu 
$sqlCommand = "SELECT * FROM albums WHERE userid='$id' AND WHERE bor_mjesto LIKE '%$searchquery%' OR bor_kucni_broj LIKE '%$searchquery%' OR 
bor_postanski_broj LIKE '%$searchquery%' OR bor_ulica LIKE '%$searchquery%' OR bor_opcina LIKE '%$searchquery%'"; 
       } 
     } 

スクリプト全体はそれでuserid='$id'せずに正常に動作しているが、私は検証スクリプトが死んで落ちることを追加したとき。

+0

ID制約が追加されたクエリのコードを投稿してください。また、$ idに含まれている値が含まれていることを確認しましたか? – octern

+0

あなたはそれに妥当性検査とクエリを表示していただけますか? –

+0

@BrianWarshaw私は妥当性検査でコードを編集していますが、$ id値はokであり、結果はuserid = '$ id'なしでokです。だから間違ったことをしている。 –

答えて

3

WHERE句が2つあるため、SQLは無効です。

変更し、それに:

$sqlCommand = "SELECT * FROM albums WHERE userid='$id' AND (bor_mjesto LIKE %$searchquery%' OR bor_kucni_broj LIKE '%$searchquery%' OR bor_postanski_broj LIKE '%$searchquery%' OR bor_ulica LIKE '%$searchquery%' OR bor_opcina LIKE '%$searchquery%')"; 

はこのように、あなたが二WHEREをドロップ(といくつかの括弧を追加)する必要が

+0

そうですね、カッコです。ありがとう。 –

2

(複数の「OR」ステートメントを囲む括弧の使用を注意してください) :

$sqlCommand = " 
SELECT * 
FROM 
albums 
WHERE 
userid='$id' 
AND 
(
bor_mjesto LIKE '%$searchquery%' OR 
bor_kucni_broj LIKE '%$searchquery%' OR 
bor_postanski_broj LIKE '%$searchquery%' OR 
bor_ulica LIKE '%$searchquery%' OR 
bor_opcina LIKE '%$searchquery%' 
) 
"; 

クエリごとに1回だけWHEREを使用する必要があります。また、整数値であるため、$ idの周りに一重引用符を追加する必要はありません。

また、私はあなたの変数がどこから来ているのかは分かりませんが、おそらくmysql_real_escape_stringを使ってそれらをエスケープしてから、このクエリに入れたいと思うでしょう。最後に、SELECT *はほとんどの場合間違いです。本当に必要な行だけを選択してください。それは少し時間を節約します:)

+0

エスケープするvarsに言及するために+1 – TheOx

+0

@Daan 1ページに多くのクエリーがある場合はどうなりますか? mysql_real_escape_stringを実行する簡単な方法はありますか?多分私は 'mysql_real_escape_string'を誤解しているのでしょうか? –

+0

変数を複数回使用している場合(例では '$ searchquery'のように)、一度エスケープするだけです。これをクエリの前に置いてください: '$ searchquery = mysql_real_escape_string($ searchquery);'その後、 '$ searchquery'という文字列はMySQLクエリでの使用に安全です。これは、 '$ searchquery'に一重引用符があると問題を防ぐのに役立ちます。エスケープしないと、一重引用符は文字列を終了すると解釈され、MySQL構文エラーにつながります。ユーザー入力を適切にエスケープすると、[SQLインジェクション](http://stackoverflow.com/a/601524/1185355)からもあなたを守ることができます。 – Daan

関連する問題