2013-07-07 86 views
2

我已經建立了一個簡單的搜索欄,我的網站,如果我的查詢看起來是這樣的,它的偉大工程:問題與查詢搜索欄

$sql = query("SELECT id, firstname, lastname, username, location FROM 
users WHERE firstname LIKE '%" . $search_query . "%' LIMIT 20"); 

,但如果我寫這樣的,它呼應一個SQL語法錯誤:

$sql = query("SELECT id, firstname, lastname, username, location FROM 
users WHERE firstname, lastname, username, location LIKE '%" . $search_query . "%' 
LIMIT 20"); 

2個查詢之間的區別在於:第二個將通過多列搜索這正是我需要的,因爲我的用戶可以搜索無論是名稱或城市。

我該如何重寫它?

+4

您需要爲每列「LIKE」和「或」他們在一起。 –

回答

0

您需要分別指定每個列的搜索條件:

$sql = query("SELECT id, firstname, lastname, username, location 
FROM users 
WHERE firstname LIKE '%$search_query%' 
OR lastname LIKE '%$search_query%' 
OR username LIKE '%$search_query%' 
OR location LIKE '%$search_query%' 
LIMIT 20"); 

正如你所看到的,我已經去除了串聯 - 由於您使用雙引號,變量可以直接進入查詢。

此外,我希望$search_query已經被打斷,或者你打開自己的SQL注入攻擊;真的,你現在應該使用參數化查詢。

1

不幸的是,您必須重複每個字段的LIKE語句。

SELECT id, firstname, lastname, username, location FROM users 
WHERE firstname LIKE '%" . $search_query . "%' 
OR lastname LIKE '%" . $search_query . "%' 
OR username LIKE '%" . $search_query . "%' 
OR location LIKE '%" . $search_query . "%' 
LIMIT 20 
1

關鍵字LIKE不起作用。試試這個:

$like_string = "'%$search_query%'"; 

$query = "SELECT id, firstname, lastname, username, location 
FROM users 
WHERE firstname LIKE $like_string OR 
lastname LIKE $like_string OR 
username LIKE $like_string OR 
location LIKE $like_string 
LIMIT 20"; 

$sql = query($query); 

正如其他人會告訴你,這是明智的考慮SQL注入和接受任何用戶數據之前進行健全和有效性檢查。看看this關於如何防止SQL注入的問題。

PDO extensionmysqli extension是MySQL的首選,並且mysql_函數已被棄用(可在整個documentation中看到)。