我有一個表單,用戶可以輸入名字進行搜索,我的查詢沒有返回正確的結果,我做錯了什麼?php mysql - search like - variable
$sfn = $_POST["Text1"];
$sql = "SELECT * FROM ex_usrs WHERE firstname LIKE '$sfn'";
...
我有一個表單,用戶可以輸入名字進行搜索,我的查詢沒有返回正確的結果,我做錯了什麼?php mysql - search like - variable
$sfn = $_POST["Text1"];
$sql = "SELECT * FROM ex_usrs WHERE firstname LIKE '$sfn'";
...
你的查詢只返回行,其中firstname
是等於$_POST["Text1"]
。當您使用LIKE
時,您可以使用通配符(%
)來表示任意數量的字符。
這將找到行,其中firstname
開始與$_POST["Text1"]
。
SELECT * FROM ex_usrs WHERE firstname LIKE '$sfn%'
其中firstname
與$_POST["Text1"]
結束。這將找到的行。
SELECT * FROM ex_usrs WHERE firstname LIKE '%$sfn'
這將找到行,其中firstname
包含$_POST["Text1"]
。
SELECT * FROM ex_usrs WHERE firstname LIKE '%$sfn%'
注:從$_POST
決不使用變量,而無需先逃離他們。如果我搜索了"O'Neil"
(或更糟的"'; DROP TABLE ex_users; -- "
),該怎麼辦?
也許你應該添加%-signs到您的關鍵字是這樣的:
$sql = "SELECT * FROM ex_usrs WHERE firstname LIKE '%$sfn%'";
謝謝,太累了,錯過了! – Wilest 2011-12-27 14:24:37
您應該使用%searchterm%
- 包括%
通配符。
$sql = "SELECT * FROM ex_usrs WHERE firstname LIKE '%$sfn%'";
應該
"SELECT * FROM ex_usrs WHERE firstname LIKE '%$sfn%'"
你真的應該逃避你在查詢中的東西......安全,任何人? – 2011-12-27 14:24:01
我將從那開始,謝謝你,這是一個內部網站,但仍然,它必須做 – Wilest 2011-12-27 14:25:47