проблема в метке времени запроса 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();
2 answers
Вы хотите передать значение DATETIME
, а не просто TIME
, используйте NOW()
, а не CURTIME()
. (Если вы хотите игнорировать время суток, то используйте CURDATE()
.
Кроме того, измените порядок аргументов, как это делает функция datetime2 - datetime1
.
Смотрите документацию для получения более подробной информации.
TIMESTAMPDIFF(DAY, `timestamp`, NOW()) < 1
Использование зарезервированного слова для имени столбца также не поможет.
CURTIME()
возвращает текущее время (без даты). Я полагаю, что дата, используемая там TIMESTAMPDIFF
, - "min_date", попробуйте использовать вместо этого CURDATE()