2012-05-07 43 views
1

quicky一個查詢,我創建的搜索查詢和我被困在一個問題......這段代碼。搜索與驗證

此代碼工作正常,但我需要添加此驗證到它,問題出現在我添加此驗證userid='$id'時,搜索查詢不起作用。有人能讓我走上正確的道路嗎?我在這裏錯過了一些東西。 $ id的值是肯定的。這是此搜索查詢的整個代碼部分,結果沒有驗證就可以。

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值沒問題,沒有userid ='$ id',結果沒問題。所以我做錯了什麼。 –

回答

3

你的SQL是無效的,因爲你有2個WHERE子句。

將其更改爲:

$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%')"; 

(注意使用括號包圍的多個「或」語句)

+0

是的括號,就是這樣。謝啦。 –

2

您需要刪除第二WHERE(並添加一些括號),這樣:

$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一次。此外,您不需要在$ id附近添加單引號,因爲它是一個整數值。

而且,我不知道您的變量是從哪裏來的,但你可能會希望他們使用mysql_real_escape_string將它們放入此查詢之前逃脫。最後,SELECT *幾乎總是一個錯誤:只選擇你真正需要的行。這會爲您節省一點時間:)

+0

+1提逃逸,如果我在一個頁面中有許多querys瓦爾 – TheOx

+0

@Daan什麼?有沒有簡單的方法來執行'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