2016-04-21 63 views
2

我想在php中建立一個簡單的搜索功能,搜索SQL數據庫中的值。PHP/SQL處理特殊字符(PHP初學者)

我的代碼似乎到目前爲止工作正常,但我有一些特殊字符的問題。例如,就我所知,我沒有得到任何搜索結果,因爲沒有調用die命令而執行搜索。

$query = mysql_query("SELECT * FROM table WHERE attribute LIKE '%$input%';") 
or die("Could not search"); 

我認爲這個問題是$input是它可以包含的東西像& B A字符串。我如何處理這個?

此外,數據庫包含一些法語單詞,所以我必須處理所有é,ç,ô等。如何確保數據庫中包含特殊字符的輸出(例如hôtel)通過php正確顯示?

UPDATE

花費數小時試圖找出是什麼問題後,我發現一些跡象表明,事情可能出錯。起初我還以爲逃逸造成的問題,這似乎並沒有這樣的情況?

我的代碼創建一個字符串$query_in,然後使用

mysql_query($query_in); 

通過我附和$query_in字符串進行調試:

SELECT * FROM table WHERE attribute1 LIKE 
"%a & b%" OR attribute2 LIKE "%a & b%" OR 
attribute3 LIKE "%a & b%" OR attribute4 
LIKE "%Ta & b%" OR attribute5 LIKE "%a & b%" 
OR attribute6 LIKE "%a & b%" 

如果我手動運行(複製粘貼&)這個查詢在phpMyAdmin界面,它工作得很好,我得到的結果。然而,當我使用檢查從數據庫空返回值:

$count = mysql_num_rows($query); 

echo $count返回0

怎麼可能?另外,放心,我會切換事情交給msqli後,這是固定的;)

+0

應用這兩個東西。 1-您需要將表格的排序規則定義爲utf8_general_ci。你需要定義'mysql_set_charset('utf8');'在與數據庫建立連接的文件中,在選擇數據庫(如'mysql_select_db')之後,使用'mysql_set_charset',這將允許您以任何語言正確添加和檢索數據。之後,只需使用mysql_real_escape_string執行搜索,就可以得到所需的內容。乾杯 –

+0

夥計們,夥計們!沒有人在那裏警告我們的年輕朋友[不要使用mysql_ *函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)? – giorgio

回答

0

utf8_encode

$query = mysql_query("SELECT * FROM table WHERE attribute LIKE '%".utf8_encode($input)."%';") or die("Could not search"); 

或者嘗試通過添加與數據庫連接這條線,

mysql_set_charset("utf8", $database_name); 

建議:不要使用mysql,現在不推薦使用它。

0

處理特殊字符使用addslash或MySQL逃生功能

$query = mysql_query("SELECT * FROM table WHERE attribute LIKE '%" . addslashes($input) . "%';") or die("Could not search"); 

OR

$query = mysql_query("SELECT * FROM table WHERE attribute LIKE '%" . mysql_real_escape_string($input) . "%';") or die("Could not search");