在MySQL WHERE子句中使用MD5和CONCAT

时间:2015-03-21 18:57:39

标签: mysql md5 where contact

我正在创建重置密码程序。这样:

1-向用户发送重置电子邮件(忘记了密码),此电子邮件中包含指向此地址的链接:

http://www.example.com/resetpassword.php?userid=1b2798bad6ee465d967cdb71ced504f7

参数[userid]的值由此PHP代码生成:

<?php 
md5($row_Recordset2['userID'].date('d-m-Y'));
?>

注意:我这样做是为了获得一个唯一的参数值,包含:真实用户ID的MD5哈希+当前日期(连接),为什么?因此,电子邮件中的链接仅适用于当前日期。我不希望该链接在第二天起作用。

2-当此人点击上述链接时,他/她将被带到页面[resetpassword.php]

3-在[resetpassword.php]页面中我有这段代码:

$colname_Recordset1 = "-1";
if (isset($_GET['userid'])) {
  $colname_Recordset1 = $_GET['userid'];
}
mysql_select_db($database_aaa_database, $aaa_database);
$query_Recordset1 = sprintf("SELECT * FROM users WHERE md5(CONCAT(userID,
DATE_FORMAT(NOW(),'%d-%m-%Y'))) = %s ", GetSQLValueString($colname_Recordset1, 
"text"));
$Recordset1 = mysql_query($query_Recordset1, $aaa_database) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

SELECT语句返回[查询为空] ...问题是什么以及如何解决?

我手动测试了这个MySQL语句:

SELECT userFirstName, md5(CONCAT(userID, DATE_FORMAT(NOW(),'%d-%m-%Y'))) from users

它返回许多行,其中一行是这样的:

Sam 1b2798bad6ee465d967cdb71ced504f7

所以,:

md5(CONCAT(userID, DATE_FORMAT(NOW(),'%d-%m-%Y')))

工作正常,它返回PHP代码生成的完全相同的值:

<?php 
md5($row_Recordset2['userID'].date('d-m-Y'));
?>

PHP给:1b2798bad6ee465d967cdb71ced504f7

MySQL给出:1b2798bad6ee465d967cdb71ced504f7

但是这个:

md5(CONCAT(userID, DATE_FORMAT(NOW(),'%d-%m-%Y')))

似乎在WHERE子句中没有工作:

sprintf("SELECT * FROM users WHERE md5(CONCAT(userID,
DATE_FORMAT(NOW(),'%d-%m-%Y'))) = %s ", GetSQLValueString($colname_Recordset1, 
"text"));

顺便说一下,我正在使用Dreamweaver。

我不知道如何解决这个问题。任何帮助将受到高度赞赏。

0 个答案:

没有答案
相关问题