【问题标题】:How to calculate expiry date using pdo prepare statement?如何使用 pdo prepare 语句计算到期日?
【发布时间】:2018-12-12 08:05:10
【问题描述】:

我需要用当前日期和创建日期计算链接到期日期,以检查链接是否已过期。 我以这种格式将日期添加到数据库中:

$expires = date("U") + 1800;

并尝试像这样计算:

 $currentDate = date("U");

$result = $pdo->prepare("SELECT * FROM pwdreset WHERE pwdResetSelector = :pwdResetSelector AND pwdResetExpires >= :pwdResetExpires");
$result->bindValue(':pwdResetSelector', $selector);
$result->bindValue(':pwdResetExpires ', $currentDate);
$result->execute();

但它计算不正确并将我重定向到错误页面而不是显示表单以填写详细信息。

【问题讨论】:

  • prepared 应该是prepare
  • 对不起它的 prepare 在原始代码中并在问题中更正了,但仍然有同样的问题。
  • pwdResetExpires 的数据类型是什么?

标签: php mysqli pdo


【解决方案1】:

如果您正在寻找从数据库中返回过期值的查询,我认为您需要做的就是将您的相等设置为小于或等于。

如果您在数据库中将到期日期设置为date(U) + 1800,那么显然这是一个未来的日期。

因此,如果今天的日期大于pwdResetExpiresdate,则应该进行重置,因为它已过期。

您的查询是if the pwdResetExpires date is greater than today's date。这意味着它没有过期,因为今天的日期还没有超过 pwdResetExpires 日期。

如果您在查询中说pwdResetExpires is less than today's date,那么它已过期。

SELECT * FROM pwdreset WHERE pwdResetSelector = :pwdResetSelector AND pwdResetExpires <= :pwdResetExpires

【讨论】:

  • 感谢您的回答,我正在尝试验证 currenDate 是否大于 pwdResetExpires 看起来我的查询是正确的,我正在发送链接并尝试在 3 分钟内确认,但它会将我重定向到错误页面,我不确定是否应该检查 less ?
  • 如果是这样,那么您正在寻找尚未过期的日期?
  • 是的,我正在检查当前日期是否未通过数据库中的pwdResetExpires
  • 请发布一些额外的代码。检查查询结果并重定向到错误页面的代码在哪里?
  • 你的回答让我头脑清醒,我让它在更大的日期参数下工作,谢谢你的帮助,我很感激。
猜你喜欢
  • 2011-01-26
  • 2012-11-13
  • 2011-04-04
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多