Php 我可以使用mysql';更新中的md5函数是什么?

Php 我可以使用mysql';更新中的md5函数是什么?,php,sql,mysql,Php,Sql,Mysql,我不知道如何问这个问题,因此我将从我已有的开始: mysql_query("UPDATE `questions` SET `votes` = `votes` + 1 WHERE `questionID`='".md5($_GET['q'])."'"); 我要做的是更新md5哈希版本的questionID=某个字符串所在的行。我可以使用MySQL的md5函数来实现这一点吗 编辑: 那么会是这样的吗? "WHERE MD5(`questionID

我不知道如何问这个问题,因此我将从我已有的开始:

mysql_query("UPDATE `questions` SET `votes` = `votes` + 1 
WHERE `questionID`='".md5($_GET['q'])."'");
我要做的是更新md5哈希版本的
questionID
=某个字符串所在的行。我可以使用MySQL的md5函数来实现这一点吗

编辑: 那么会是这样的吗?

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

可以,但在代码中使用的是PHP的

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

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


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

'WHERE MD5(field)="'.md5($field).'"'
不过,您通过
$\u GET
传递
“q”
的方法并不安全。当用户在浏览器的地址栏上可以看到
?q=
这一事实时,对其进行散列没有任何意义。在提交表单之前,您可能希望首先通过Javascript MD5函数预处理
“q”


如果您确实希望以这种方式使用MD5哈希,我建议您预先计算questionID的哈希值,并将其存储在questions表的一列中。为该列编制索引。如果在WHERE子句中使用索引列,MySQL只会查看索引以查找匹配的行

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

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


你是对的,但是你能给他正确的语法来帮助他吗?谢谢你的SQL注入错误@J-16,谢谢,我的片段不完整。它假定
$\u GET['q']
已被转义。然而,我在上面展示了它。另一种方法(毫无疑问)是使用
PDO
mysqli
prepared语句来比较两个相同的字符串。也许您的意思是“WHERE questionID=MD5(“.$\u GET['q']”)。questionID未在数据库中散列。这是一个索引号。我不想让人们看到?q=5412我也在做什么?q=a9e5cc03183b0dc0a4929393e9d77796,然后尝试更新md5('5412')=“a9e5cc03183b0dc0a4929393e9d77796”行好的,所以你的代码很好,我没有理解;)是的,他们知道散列值。但他们不知道,例如,下一个问题ID是5413。所以有理由这样做。我没有代表评论stillstanding的回答,所以这是我唯一的澄清方法。如果字符集不同,MySQL MD5()将不会提供相同的哈希值。前任:
'WHERE MD5(field)="'.md5($field).'"'