你的問題是與MySQL語法相關,而不是與哈希相關。
好會的做法是這樣的:
$password = md5($password.$global_salt.$_COOKIE['LALA_ID']);
$password = mysql_real_escape_string($password);
$lala_id = mysql_real_escape_string($_COOKIE['LALA_ID']);
$query = "SELECT emails_password,emails_id FROM lala.in_emails
WHERE emails_password ='$password'
AND emails_id='$lala_id'";
$result = mysql_query($query) or trigger_error(mysql_error().$query);
if(mysql_num_rows($result)>0){echo "same pass";}
感謝斯特凡和伊姆雷L用他們的偉大的意見,使這個代碼更好
附錄: 人們在評論指責我使用轉義的MD5 ()函數結果。
我覺得這是爲未來的讀者解釋的好點:
如果您想到每個特定變量的數據源 - 您正在混合圖層。
MD5()不做任何「消毒」。這只是一個巧合,它的結果不包含特殊字符。 但是一個人不應該想到這一點!
數據庫層應該獨立於上下文。它必須是完全抽象的。不管你如何驗證你的數據 - MD5,只有拉丁字母,數字等 - 所有這些與數據庫層無關。 DB層應該知道數據源和表單的註釋。它應該只是執行正確語法的SQL的職責。有一天,驗證規則可能會更改 - 對於普通密碼,或者某些二進制格式可能包含空字節等。驗證規則可能會更改,但數據庫規則必須保持不變。
以準備好的語句爲例:
您是否決定每個變量,它是否需要綁定?不,你無條件地做,無論它是什麼形式。所以,引號中的數據轉義應該是。
是的正確,在這裏犯了一個錯誤..感謝 – tetris 2010-06-28 06:15:30
...但增加了'$ password'' – 2010-06-28 06:17:21
''md5'($ password)''=>'md5('$ password')',但你應該散列在PHP中的密碼不在SQL中:如果出現問題,明文密碼將不會在MySQL轉儲中。請參閱@Babiker答案。 – 2010-06-28 06:18:54