我可以在更新中使用mysql的md5函数吗?

时间:2010-11-13 04:42:02

标签: php sql mysql

我不知道如何问这个,所以我将从我已经开始的事情开始:

mysql_query("UPDATE `questions` SET `votes` = `votes` + 1 
WHERE `questionID`='".md5($_GET['q'])."'");

我想要做的是更新md5散列版questionID =某个字符串的行。我可以使用MySQL的md5函数吗?

编辑:

那会是这样吗:

"WHERE MD5(`questionID`)='".md5($_GET['q'])."'"

3 个答案:

答案 0 :(得分:1)

当然。 MySQL的MD5行为与PHP的MD5相同。

'WHERE MD5(field)="'.md5($field).'"'

您通过"q"传递$_GET的方法并不安全。当浏览器地址栏上的用户可以看到?q=这一事实时,没有任何意义。您可能希望在表单提交之前首先通过Javascript MD5函数预处理"q"

http://pajhome.org.uk/crypt/md5/

答案 1 :(得分:1)

如果您真的想以这种方式使用MD5哈希,我建议预先计算questionID的哈希值并将其存储在问题表的列中。索引此列。如果在WHERE子句中使用了索引列,MySQL只会查看索引以查找匹配的行。

如果未对列进行索引,或者使用诸如MD5()之类的函数,则MySQL必须查看该数据库表中的每一行以返回您要查找的信息。您将看到索引列的主要性能提升,尤其是在较大的数据集上。

您可能还希望使用盐,以便MD5哈希值不易转换为原始值。有关详细信息,请参阅此URL:

http://skfox.com/2007/12/18/md5-hashes-and-salt/

答案 2 :(得分:0)

你可以,但在那段代码中你使用的是PHP的md5

编辑:如果要搜索questionID列的哈希值等于$_GET['q']的哈希值的行,则第二行看起来正确。但是,目前还不清楚你使用的是MD5。也许你应该给一些背景知识。

编辑2:由于q已经经过哈希处理,因此应该(有逃逸):

"WHERE MD5(`questionID`)='" . mysql_real_escape_string($_GET['q']) . "'"