2016-05-12 276 views
3

未知列我有一個代碼:SQL:在 'where子句'

$id=implode(",",$selected); 

$query = "SELECT u.id, p.brand, n.number FROM `user` u 
LEFT OUTER JOIN `phone` p ON u.id = p.id LEFT OUTER JOIN `number` n 
ON p.id = n.id WHERE u.id in ($id)"; 

其中$選擇的是一個數組array(1,2,3)。但是當我運行它,它會出現這樣的通知:

未知列「1」在「where子句」

如何處理這個問題?謝謝

+5

'回聲$查詢;'這是什麼? –

+2

它給你'u.id in(1,2,3)'。在SQL中,通常數字被理解爲列號,對於需要「1」,「2」,「3」的值,然後Hemant的答案在那裏是有意義的。然後是McAdam的安全漏洞評論:你沒有使用參數化查詢。 – SparK

回答

1

在這裏,你可以不喜歡它:

$id = implode("','",$selected); 

這個查詢將運行:

$query = "SELECT u.id, p.brand, n.number FROM `user` u LEFT OUTER JOIN `phone` p ON u.id = p.id LEFT OUTER JOIN `number` n 
ON p.id = n.id WHERE u.id in ('$id')"; 
+0

我知道你試圖演示如何使用'IN'子句,但是這對使用參數化查詢嘗試執行它的OP沒有幫助。 – AdamMc331

+0

@ McAdam331它實際上對他有幫助,他的問題並沒有在值的周圍使用引號,所以'1'(第一個數組值)被解釋爲列名而不是值。據說,他應該考慮使用準備好的聲明或至少對輸入值進行消毒。 – Juan

+0

@Juan現在你已經向我解釋了這個問題,但答案可能對於新手來說並不直觀(因爲它對我來說不直觀),所以可以編輯它以解釋這一點。 – AdamMc331