проблема в метке времени запроса 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();
Author: anvd, 2011-03-22

2 answers

Вы хотите передать значение DATETIME, а не просто TIME, используйте NOW(), а не CURTIME(). (Если вы хотите игнорировать время суток, то используйте CURDATE().

Кроме того, измените порядок аргументов, как это делает функция datetime2 - datetime1.

Смотрите документацию для получения более подробной информации.

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

Использование зарезервированного слова для имени столбца также не поможет.

 3
Author: Orbling, 2011-03-22 15:39:58

CURTIME() возвращает текущее время (без даты). Я полагаю, что дата, используемая там TIMESTAMPDIFF, - "min_date", попробуйте использовать вместо этого CURDATE()

 1
Author: manji, 2011-03-22 15:37:41