mysqli查询中的问题 - 时间戳

时间:2011-03-22 15:29:16

标签: php mysql timestamp mysqli

我的查询有问题。

数据库中的字段(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();

2 个答案:

答案 0 :(得分:3)

您希望传递DATETIME值,而不只是TIME,使用NOW()而不是CURTIME()。 (如果您想忽略一天中的时间,请使用CURDATE()

此外,反转参数顺序,因为函数执行datetime2 - datetime1

有关详细信息,请参阅documentation

TIMESTAMPDIFF(DAY, `timestamp`, NOW()) < 1

使用保留字作为列名也无济于事。

答案 1 :(得分:1)

CURTIME()返回当前时间(没有日期)。我认为TIMESTAMPDIFF使用的日期是'mindate',请尝试使用CURDATE()