【问题标题】:MySql select if date is NOT more than 15 min agoMySql 选择如果日期不超过 15 分钟前
【发布时间】:2015-09-20 14:55:33
【问题描述】:

我正在尝试创建一个登录系统,让您在 15 分钟不活动后退出。这是我当前获取数据的代码:

$itemResult = mysql_query("SELECT * FROM `logins` WHERE token = '$token' AND logged_date xxxxx");

这就是我卡住的地方。日期格式如下:yy/mm/dd h:m

我需要使用不超过 15 分钟的正确令牌选择所有内容。我该怎么做?

【问题讨论】:

  • 为什么要为此使用数据库?将上次活动的日期/时间存储在会话变量中,每次用户执行某项操作时更新它并使用它来跟踪不活动。
  • @HoboSapiens 如果用户关闭浏览器,会话将被销毁。在这种情况下,我们需要 15 分钟进行编辑。
  • @stack 所以你想在浏览器关闭后让会话保持登录状态?在时间窗口内重新打开该浏览器的人可能会重新打开会话并执行任何操作...

标签: php mysql sql time


【解决方案1】:

解释:

因为您使用的是 varchar 列类型,您需要将它们转换为相同的类型,要么更改数据库以将日期存储为日期(通常是最佳实践),要么使用 str_to_date() 将您的字符串转换为比较之前的日期。

然后我们使用NOW()函数获取当前日期时间,从NOW()的值中减去15分钟的间隔,并与logged_date列进行比较

或者您可以使用Date_format()now - 15min 日期转换为字符串

date_format(DATE(NOW() - INTERVAL 15 MINUTE), '%y/%m/%d %h:%i') 然后将你的 varchar 与那个进行比较

查询:

SELECT *
FROM `logins`
WHERE token = '$token'
      AND 
      str_to_date(logged_date, '%y/%m/%d %h:%i') >= DATE(NOW() - INTERVAL 15 MINUTE)

【讨论】:

  • 似乎不起作用。即使该行存在超过 15 分钟,它仍然被查询接受为有效结果。
  • logged_date 是 datetime 列类型还是 varchar 还是什么?
  • 要么将列类型更改为日期类型,要么使用我发布的编辑
  • 看看我对帖子所做的更改是否对您有帮助@user2372837
  • 我已将其更改为数据库中的 DATETIME 值,但旧代码仍然无效?
猜你喜欢
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多