【问题标题】:problem in mysqli query - timestampmysqli 查询中的问题 - 时间戳
【发布时间】:2011-07-20 14:26:27
【问题描述】:

我的查询有问题。

数据库中的字段 (userid, code, timestamp)

我想在此代码中验证是否存在用户 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();

【问题讨论】:

  • 有什么问题?是服务器时间偏移的问题吗?

标签: php mysql timestamp mysqli


【解决方案1】:

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

另外,颠倒参数顺序,就像函数 datetime2 - datetime1 所做的那样。

有关详细信息,请参阅documentation

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

在列名中使用保留字也无济于事。

【讨论】:

  • 像魅力一样工作,谢谢(我接受了你的回答,因为更完整)
【解决方案2】:

CURTIME() 返回当前时间(不含日期)。我想TIMESTAMPDIFF 使用的日期是'min_date',尝试使用CURDATE()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 2019-03-05
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    相关资源
    最近更新 更多