2011-12-27 70 views
0

我有一個表單,用戶可以輸入名字進行搜索,我的查詢沒有返回正確的結果,我做錯了什麼?php mysql - search like - variable

$sfn = $_POST["Text1"]; 
$sql = "SELECT * FROM ex_usrs WHERE firstname LIKE '$sfn'"; 
... 
+2

你真的應該逃避你在查詢中的東西......安全,任何人? – 2011-12-27 14:24:01

+0

我將從那開始,謝謝你,這是一個內部網站,但仍然,它必須做 – Wilest 2011-12-27 14:25:47

回答

2

你的查詢只返回行,其中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; -- "),該怎麼辦?

4

也許你應該添加%-signs到您的關鍵字是這樣的:

$sql = "SELECT * FROM ex_usrs WHERE firstname LIKE '%$sfn%'"; 
+0

謝謝,太累了,錯過了! – Wilest 2011-12-27 14:24:37

3

您應該使用%searchterm% - 包括%通配符。

$sql = "SELECT * FROM ex_usrs WHERE firstname LIKE '%$sfn%'"; 
1

應該

"SELECT * FROM ex_usrs WHERE firstname LIKE '%$sfn%'"