2012-01-06 78 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。您应该将散列存储在单独的字段中并在其上有索引。