2010-03-27 102 views
2

我的代碼包含PHP的MySQL搜索

SELECT * FROM newchap WHERE company LIKE '%$company%' OR Category LIKE '%$cat%' 

它完美然而,當現場$公司包含空的,它在MYSQL返回所有結果。

如何預防?

回答

5
SELECT * 
FROM newchap 
WHERE (company LIKE '%$company%' AND company != '') OR Category LIKE '%$cat%' 
2

由於%通配符可以是字符的任意組合,如果它是空的,您將選擇任何公司;你在這種情況下,查詢是

SELECT * FROM newchap WHERE company LIKE '%%' OR Category LIKE '%$cat%' 

您可以添加AND條件到SQL過濾掉的情況下,公司爲空,或者你可以只檢查在PHP。如果這是一個應該更快的常見情況,因爲它可以節省您運行查詢的時間。

另外 - 和這是非常重要的 - 如果有可能$公司或$貓可能包含用戶輸入,你應該使用parameterized SQL query。否則你正在爲SQL injection創建一個漏洞。