2012-01-06 123 views
2

考慮這種使用MD5選擇電子郵件:PHP MySQL在where子句

$email = 'c5dfd29d956b52c1ffa00ce4a06abad2'; // From the query string (MD5) 

$result = mysql_query('SELECT * FROM ' . $table 
      . ' WHERE MD5(email_address) = ' . $email); 

$row = mysql_fetch_array($result); 
echo $row['email_address']; 

我想從「email_column」獲得的價值,如果散列電子郵件是相同的(從數據庫和查詢字符串使用MD5)。這樣做的正確方法是什麼?

+0

使用表中的另一個鍵進行身份驗證,而不是發送電子郵件md5 – Dau 2012-01-06 07:26:17

+0

提供的代碼看起來是正確的(除了它使用的是mysql_ *函數,您真的不應該這樣做)使用mysqli或pdo來代替)。 – GordonM 2012-01-06 07:36:53

+0

1st:只返回真正需要的'SELECT'中的行,2nd:永遠不會包裝應該在(標量)函數內索引的列,MySQL不會使用索引,3rd:呵呵?有什麼問題? – rabudde 2012-01-06 07:37:36

回答

5

首先,你忘了在你的查詢中在$ email周圍添加引號。另外,如果你從用戶那裏拿到它,在把它傳遞給數據庫之前,永遠不要忘記做mysql_real_escape_string。另外,由於MySQL不允許使用函數索引,因此您必須明白,此查詢將要求MySQL讀取表的每一行,並在每封要檢查的電子郵件上運行MD5。您應該將散列存儲在單獨的字段中並在其上有索引。