PHP Mysql使用MD5 on where子句选择电子邮件

PHP Mysql使用MD5 on where子句选择电子邮件,php,mysql,Php,Mysql,考虑这一点: $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 = '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'];

如果散列的电子邮件相同(从数据库和使用MD5的查询字符串中),我想从“email_列”中获取值。正确的方法是什么?

首先,您忘记在查询中添加$email的引号。此外,如果您是从用户那里获取它,在将它传递到数据库之前,千万不要忘记执行
mysql\u real\u escape\u string


此外,由于MySQL不允许函数索引,您必须了解,此查询将要求MySQL读取表的每一行,并在每封电子邮件上运行MD5进行检查。您应该将散列存储在单独的字段中,并在其上建立一个索引。

使用表中的另一个密钥进行身份验证,而不是使电子邮件MD5所提供的代码看起来正确(除了它使用mysql_*函数这一事实,您确实不应该这样做。请改用mysqli或pdo).1:只返回
SELECT
中真正需要的行,2:永远不要在(标量)函数中包装应该被索引的列,MySQL不会使用索引,3:嗯?有什么问题吗?