gpt4 book ai didi

php - 如何使用 Mysql If 函数来评估日期时间列?

转载 作者:行者123 更新时间:2023-11-29 07:18:05 25 4
gpt4 key购买 nike

我想使用 php mysqli 准备语句评估到期日期时间列是否大于等于 Now() 日期时间,然后在名称列中返回用户名。但是当 expire_date 是 2019-09-27 01:00:00 而 Now() 是 2019-09-26 23 时,我得到了一个不正确的结果:58:02 我弄错了。奇怪的是,当我在终端中键入查询时,我得到了想要的结果。

仅使用 Sql 查询:

mysql> SELECT IF(Now()<=expire_date, for_user, 'false') FROM forgottenleafttokens WHERE(for_user='herm' AND pass_token='9c3d5eee11f1c7cacdf676b46df87bccb650783d66afc62aee2b7f6e9382aade4ca4e1840896f788b4cff4342b4dec0842f3c577f5f61bf17fd538c7f34ca69a');
+-------------------------------------------+
| IF(Now()<=expire_date, for_user, 'false') |
+-------------------------------------------+
| herm |
+-------------------------------------------+
1 row in set (0.00 sec)

使用 php:

            $query = "SELECT IF(Now()<=expire_date, for_user, 'false') FROM forgottenleafttokens WHERE(for_user=? AND pass_token=?)";
$stmt = $db->prepare($query);
$stmt->bind_param('ss', $us_er, $tok_en);
$stmt->execute();

$stmt->bind_result($user);
$result = "";
if ($stmt->num_rows > 0) {
while ($stmt->fetch()) {
$result = $user;

} return $result;
} else {
return false;
}

有人可以指点我在 Sql 查询中使用的 php 准备语句有什么问题吗?

最佳答案

mysql 服务器设置在哪个时区运行,expire_date 的类型是什么?如果它是 TIMESTAMP,它正在调整时区,如果它是 DATETIME,则不是。我在查询中没有看到任何错误,但是,代码有点冗长并且没有正确迭代结果集。我试着稍微清理一下,假设这只会返回 1 或 0 个结果。例如:限制 1;

            $result = false;
if ($stmt->fetch()) {
$result = $user;
}
return $result;

如果您确实遇到一些自动时区转换问题,您可以使用 CONVERT_TZ 函数对其进行规范化。

SELECT IF(NOW() <= CONVERT_TZ(expire_date, 'UTC', 'America/New_York'), for_user, 'false') ...

关于php - 如何使用 Mysql If 函数来评估日期时间列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com