簡體   English   中英

我可以在更新中使用mysql的md5函數嗎?

[英]Can I use mysql's md5 function in an update?

我不知道如何問這個問題,所以我將從已經開始的事情開始:

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

我想做的是更新questionID ID的md5哈希版本=一些字符串的行。 我可以使用MySQL的md5函數嗎?

編輯:

它會是這樣的事情:

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

當然。 MySQL的MD5行為與PHP的MD5相同。

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

但是,通過$_GET傳遞"q"方法並不安全。 當瀏覽器的地址欄上的用戶可以看到?q=這一事實時,沒有任何意義。 您可能需要在提交表單之前先通過Javascript MD5函數預處理"q"

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

如果您真的想以這種方式使用MD5哈希,我建議預先計算questionID的哈希值並將其存儲在問題表的列中。 索引此列。 如果在WHERE子句中使用了索引列,MySQL只會查看索引以找到匹配的行。

如果列未編入索引,或者使用諸如MD5()之類的函數,則MySQL必須查看該數據庫表中的每一行以返回您要查找的信息。 您將看到索引列的主要性能提升,特別是在較大的數據集上。

您可能還希望使用一種鹽,以便您的MD5哈希值不容易轉換為原始值。 有關更多信息,請參見此URL:

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

您可以,但是在該代碼中,您使用的是PHP的md5

編輯:如果你想搜索一行,其中questionID列的哈希值等於$_GET['q']的哈希值,那么第二行看起來正確。 不過,目前還不清楚您正在使用MD5做什么。 也許你應該給一些背景。

編輯2:由於q已經散列,它應該是(有逃逸):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM