我可以MD5我选择的列吗?

时间:2011-09-01 23:57:00

标签: php mysql

我已经完成了一些谷歌,它没有提出任何问题,所以我在这里问。

我正在尝试运行此查询(语言为PHP):

SELECT * FROM table WHERE MD5(field1) = '$var'

它没有返回任何行,

非常感谢任何帮助。

P.S。

我尝试了一些变体,例如“SELECT field1 as name FROM table WHERE MD5(name)='$ var'”但它仍然不起作用。

编辑:

我明白了。这个问题的很多答案都假定了很多东西,比如1.它是用于登录系统的(它是用于相关的东西,但不用于登录系统),2。我没有在保存它们之前散列我的值db(我是,但是这种情况要求我不知道明文,因此要求我在MD查询中使用MD5列)。很多这些假设都是因为我简化了示例中的地狱以表达我的问题。感谢那些尝试回答的人。

2 个答案:

答案 0 :(得分:5)

是的,MySQL具有内置的MD5功能。

<?php
    ...("SELECT * FROM table WHERE MD5(password) = '$password';") or die(...
?>

应该可以正常工作。如果它没有返回任何行,那么你必须做错其他的事情。

答案 1 :(得分:5)

看起来你是MD5错误的值。数据库中的密码不应该是纯文本,应该进行哈希处理并存储该值。您编写的查询是散列哈希值,然后将其与用户输入的纯文本进行比较。试试这个 -

SELECT * FROM table WHERE password = MD5($password);

正如Vincent所说,在将查询发送到数据库服务器之前对密码进行散列是有意义的。

$passhash = MD5($password);
SELECT * FROM table WHERE password = $passhash;