我的查询有问题。
数据库中的字段(userid, code, timestamp
)
我想在此代码中验证是否存在用户标识和相应的代码,但插入的时间不到一天,否则显示消息“链接已过期”
我的代码在没有此行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();
答案 0 :(得分:3)
您希望传递DATETIME
值,而不只是TIME
,使用NOW()
而不是CURTIME()
。 (如果您想忽略一天中的时间,请使用CURDATE()
。
此外,反转参数顺序,因为函数执行datetime2 - datetime1
。
有关详细信息,请参阅documentation。
TIMESTAMPDIFF(DAY, `timestamp`, NOW()) < 1
使用保留字作为列名也无济于事。
答案 1 :(得分:1)
CURTIME()
返回当前时间(没有日期)。我认为TIMESTAMPDIFF
使用的日期是'mindate',请尝试使用CURDATE()