首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在更新中使用mysql的md5函数吗?

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

Stack Overflow用户
提问于 2010-11-13 12:42:02
回答 3查看 1K关注 0票数 0

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

代码语言:javascript
复制
mysql_query("UPDATE `questions` SET `votes` = `votes` + 1 
WHERE `questionID`='".md5($_GET['q'])."'");

我想要做的是更新行,其中questionID = md5字符串的某个字符串的散列版本。我能用MySQL的md5函数来实现吗?

编辑:

是不是会是这样:

代码语言:javascript
复制
"WHERE MD5(`questionID`)='".md5($_GET['q'])."'"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-13 12:45:22

您可以这样做,但在该代码中使用的是PHP的md5。

编辑:如果您想要搜索questionID列的散列等于$_GET['q']的散列的行,则第二行看起来是正确的。不过,还不清楚你用MD5做什么。也许你应该提供一些背景资料。

编辑2:因为q已经是散列的,所以它应该是(转义):

代码语言:javascript
复制
"WHERE MD5(`questionID`)='" . mysql_real_escape_string($_GET['q']) . "'"
票数 0
EN

Stack Overflow用户

发布于 2010-11-13 12:45:32

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

代码语言:javascript
复制
'WHERE MD5(field)="'.md5($field).'"'

但是,您通过$_GET传递"q"的方法并不安全。当用户在浏览器的地址栏上看到?q=时,对它进行散列是没有意义的。在提交表单之前,您可能需要先通过Javascript MD5函数对"q"进行预处理:

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

票数 1
EN

Stack Overflow用户

发布于 2010-11-13 13:35:48

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

如果列没有索引,或者您使用诸如MD5()之类的函数,则MySQL必须查看该数据库表中的每一行,以返回您正在查找的信息。使用索引列可以显著提高性能,尤其是在较大的数据集上。

您可能还希望使用盐,这样您的MD5散列就不会轻易地转换为它们的原始值。有关详细信息,请参阅以下URL:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4171008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档