确保 MySQL 字段时间戳不早于当前时间 1 小时

zea*_*eal 2 mysql timestamp

好吧,我在这里看了很多类似的问题,但似乎没有一个有效。如果我目光短浅或缺乏正确搜索的能力,我提前道歉。

所以我需要做的是检查TIMESTAMP我的 MySQL 数据库中的 a ,即 15:55:13 是否不早于脚本运行时当前时间的 1 个小时。

如果我错过了任何需要的代码,请告诉我。

到目前为止我所拥有的:

$result = mysqli_query($link, "SELECT * 
                               FROM web_users
                               WHERE pass_reset_token='".$token."'
                               AND last_pass_reset < last_pass_reset
                               INTERVAL 1 HOUR")
                               or die(mysqli_error($link));
Run Code Online (Sandbox Code Playgroud)

我之前尝试过的:

$result = mysqli_query($link, "SELECT *
                               FROM web_users
                               WHERE pass_reset_token='".$token."'
                               AND last_pass_reset < NOW()-INTERVAL 1 HOUR")
                               or die(mysqli_error($link));
Run Code Online (Sandbox Code Playgroud)

还:

$result = mysqli_query($link, "SELECT *
                               FROM web_users
                               WHERE pass_reset_token='".$token."'
                               AND last_pass_reset < DATE_SUB(CURTIME(),
                               INTERVAL 1 HOUR)")
                               or die(mysqli_error($link));
Run Code Online (Sandbox Code Playgroud)

所以我的理解是,我需要匹配来确保任何操作的 SQL 时间不小于last_pass_reset也不大于1小时。

谢谢。

编辑::

这是更新的 SQL 查询,以确保我输入正确。

        // Perform a database search using the paramteres of the global variable
        $result = mysqli_query($link, "SET @scriptStartTime = CONCAT(CUR_DATE(), ' ', CUR_TIME())
                                       SELECT *
                                       FROM web_users
                                       WHERE pass_reset_token='".$token."'
                                       AND last_pass_reset > DATE_SUB(@scriptStartTime, INTERVAL 1 HOUR)")

                                       or die(mysqli_error($link));
Run Code Online (Sandbox Code Playgroud)

fan*_*nts 5

NOW()返回 a timestampCUR_TIME()只是time.

如果 TIMESTAMP 不早于当前时间的 1 个小时

对我来说翻译成:

现在是 12:34:56,所以我想要在 11:34:56 和 12:34:56 之间具有 last_pass_reset 的所有记录

正确的?那么这应该有效:

SET @scriptStartTime = NOW();

SELECT *
FROM web_users
WHERE pass_reset_token='".$token."'
AND last_pass_reset > DATE_SUB(@scriptStartTime, INTERVAL 1 HOUR)
Run Code Online (Sandbox Code Playgroud)

另一种俗气的方式:

SELECT *
FROM web_users, (SELECT @scriptStartTime:=NOW()) v
WHERE pass_reset_token='".$token."'
AND last_pass_reset > DATE_SUB(@scriptStartTime, INTERVAL 1 HOUR)
Run Code Online (Sandbox Code Playgroud)

最终解决方案:

SELECT *
FROM web_users
WHERE pass_reset_token='".$token."'
AND last_pass_reset > TIME(DATE_SUB(NOW(), INTERVAL 1 HOUR))
Run Code Online (Sandbox Code Playgroud)