проблема в запросе mysqli - отметка времени - PullRequest
3 голосов
/ 22 марта 2011

У меня проблема с моим запросом.

поля в базе данных (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 ]

3 голосов
/ 22 марта 2011

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

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

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

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

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

1 голос
/ 22 марта 2011

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

...