我的查询有问题.
数据库中的字段(用户标识,代码,时间戳)
我想在此代码中验证是否存在一个用户ID和相应的代码,但已插入的时间少于一天,否则显示消息“链接已过期”
我的代码在没有此行TIMESTAMPDIFF(DAY,CURTIME(),timestamp)<的情况下运行良好. 1“). 目前,时间戳条件不返回任何内容
"select userid, code from password_reset where userid=? and code=? and TIMESTAMPDIFF(DAY, CURTIME(), timestamp) < 1"
这段代码有问题吗?基本上,我的想法是:如果时间戳超过一天,则向用户返回错误.
我的脚本(问题仅出在查询的时间戳条件下)
if (checkBd ($sql, $db, $user, $codePass)){
$user = (int)mysqli_real_escape_string($db, $userid);
$codePass = mysqli_real_escape_string($db, $_GET['code']);
($sql = $db->prepare("select userid, code from password_reset where userid=? and code=? and TIMESTAMPDIFF(DAY, CURTIME(), timestamp) < 1"));
$sql->bind_param('ss', $user, $codePass);
$sql->execute();
$sql->bind_result($user, $codePass);
if ($sql->fetch()) {
$_SESSION['u_name']= sha1($user);
header("location: updatePass.php");
return true;
}
}
$sql->close();
$db->close();
解决方法:
您想传递一个DATETIME值,而不只是一个TIME,使用NOW()而不是CURTIME(). (如果要忽略一天中的时间,请使用CURDATE().
同样,颠倒参数顺序,就像函数执行datetime2-datetime1一样.
有关更多详细信息,请参见documentation.
TIMESTAMPDIFF(DAY, `timestamp`, NOW()) < 1
为列名使用保留字也无济于事.