我不知道如何问这个问题,所以我将从我已经知道的开始:
mysql_query("UPDATE `questions` SET `votes` = `votes` + 1
WHERE `questionID`='".md5($_GET['q'])."'");我想要做的是更新行,其中questionID = md5字符串的某个字符串的散列版本。我能用MySQL的md5函数来实现吗?
编辑:
是不是会是这样:
"WHERE MD5(`questionID`)='".md5($_GET['q'])."'"发布于 2010-11-13 12:45:22
您可以这样做,但在该代码中使用的是PHP的md5。
编辑:如果您想要搜索questionID列的散列等于$_GET['q']的散列的行,则第二行看起来是正确的。不过,还不清楚你用MD5做什么。也许你应该提供一些背景资料。
编辑2:因为q已经是散列的,所以它应该是(转义):
"WHERE MD5(`questionID`)='" . mysql_real_escape_string($_GET['q']) . "'"发布于 2010-11-13 12:45:32
当然了。MySQL的MD5行为与PHP的MD5完全相同。
'WHERE MD5(field)="'.md5($field).'"'但是,您通过$_GET传递"q"的方法并不安全。当用户在浏览器的地址栏上看到?q=时,对它进行散列是没有意义的。在提交表单之前,您可能需要先通过Javascript MD5函数对"q"进行预处理:
发布于 2010-11-13 13:35:48
如果您真的想以这种方式使用MD5散列,我建议预先计算questionID的散列值,并将其存储在问题表的列中。为此列编制索引。如果在WHERE子句中使用了索引列,MySQL只需查看索引即可找到匹配的行。
如果列没有索引,或者您使用诸如MD5()之类的函数,则MySQL必须查看该数据库表中的每一行,以返回您正在查找的信息。使用索引列可以显著提高性能,尤其是在较大的数据集上。
您可能还希望使用盐,这样您的MD5散列就不会轻易地转换为它们的原始值。有关详细信息,请参阅以下URL:
https://stackoverflow.com/questions/4171008
复制相似问题