我不知道如何问这个,所以我将从我已经开始的事情开始:
mysql_query("UPDATE `questions` SET `votes` = `votes` + 1
WHERE `questionID`='".md5($_GET['q'])."'");
我想要做的是更新md5散列版questionID
=某个字符串的行。我可以使用MySQL的md5函数吗?
那会是这样吗:
"WHERE MD5(`questionID`)='".md5($_GET['q'])."'"
答案 0 :(得分:1)
当然。 MySQL的MD5行为与PHP的MD5相同。
'WHERE MD5(field)="'.md5($field).'"'
您通过"q"
传递$_GET
的方法并不安全。当浏览器地址栏上的用户可以看到?q=
这一事实时,没有任何意义。您可能希望在表单提交之前首先通过Javascript MD5函数预处理"q"
:
答案 1 :(得分:1)
如果您真的想以这种方式使用MD5哈希,我建议预先计算questionID的哈希值并将其存储在问题表的列中。索引此列。如果在WHERE子句中使用了索引列,MySQL只会查看索引以查找匹配的行。
如果未对列进行索引,或者使用诸如MD5()之类的函数,则MySQL必须查看该数据库表中的每一行以返回您要查找的信息。您将看到索引列的主要性能提升,尤其是在较大的数据集上。
您可能还希望使用盐,以便MD5哈希值不易转换为原始值。有关详细信息,请参阅此URL:
答案 2 :(得分:0)
你可以,但在那段代码中你使用的是PHP的md5。
编辑:如果要搜索questionID列的哈希值等于$_GET['q']
的哈希值的行,则第二行看起来正确。但是,目前还不清楚你使用的是MD5。也许你应该给一些背景知识。
编辑2:由于q已经经过哈希处理,因此应该(有逃逸):
"WHERE MD5(`questionID`)='" . mysql_real_escape_string($_GET['q']) . "'"