1

さて、私はここで多くの同様の質問を見てきましたが、どれもうまくいかないようです。近視眼的または適切に検索する能力がない場合は、事前にお詫び申し上げます。

TIMESTAMPしたがって、私が行う必要があるのは、MySQLデータベースのaが、スクリプトが実行されている現在の時刻の正確に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));

私が以前に試したこと:

$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));

また:

$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));

したがって、私の理解では、操作された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));
4

1 に答える 1

4

NOW()timestampCUR_TIME()だけを返しますtime

タイムスタンプが現在の時刻の正確に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)

別の安っぽい方法:

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

最終的解決:

SELECT *
FROM web_users
WHERE pass_reset_token='".$token."'
AND last_pass_reset > TIME(DATE_SUB(NOW(), INTERVAL 1 HOUR))
于 2012-12-19T16:47:20.860 に答える