我想在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後,這是固定的;)
應用這兩個東西。 1-您需要將表格的排序規則定義爲utf8_general_ci。你需要定義'mysql_set_charset('utf8');'在與數據庫建立連接的文件中,在選擇數據庫(如'mysql_select_db')之後,使用'mysql_set_charset',這將允許您以任何語言正確添加和檢索數據。之後,只需使用mysql_real_escape_string執行搜索,就可以得到所需的內容。乾杯 –
夥計們,夥計們!沒有人在那裏警告我們的年輕朋友[不要使用mysql_ *函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)? – giorgio