MySQL DATETIME 在一个表中显示正确的日期,但在另一个表中显示不正确的时间(总是午夜)?
Posted
技术标签:
【中文标题】MySQL DATETIME 在一个表中显示正确的日期,但在另一个表中显示不正确的时间(总是午夜)?【英文标题】:MySQL DATETIME shows correct date, but incorrect time (always midnight) in one table but not in another table? 【发布时间】:2022-01-12 00:39:31 【问题描述】:我正在使用 mysql 的 DATETIME
在数据库中的两个不同表中设置日期和时间(使用 php)。其中一个实例位于users
表中,并记录此人注册帐户的时间以及他们上次登录的时间。另一种用法是在单独的messages
表中(在同一数据库中),该表记录何时用户向另一个用户发送消息。
虽然 MySQL DATETIME
代码在每个表中都是相同的,但在 messages
表上它记录了日期,但发送消息的时间总是正好是午夜,例如2021-12-06 00:00:00
在 PHPmyAdmin 中,我使用的是DATETIME
,在两个表中都没有默认值且不为空。
每种用法的 PHP 准备语句如下。如您所见,我正在使用current_date
函数。
示例 1 users
表(时间已正确记录在数据库中)。注意:fname
等一些变量来自表单元素。我没有包含表单代码以使代码更简单。
$passwordHash = password_hash($pword, PASSWORD_DEFAULT);
$sql = "INSERT INTO lj_users
(firstname, lastname, email, username, password,
date_registered, last_login, active, profile_image,
permissions)
VALUES (:firstname, :lastname, :email, :username, :password,
current_date, current_date, 0, '',
'standard' )";
$stmt = $connection->prepare($sql);
$stmt->bindParam(':firstname', $fname);
$stmt->bindParam(':lastname', $lname);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':username', $uname);
$stmt->bindParam(':password', $passwordHash);
$stmt->execute();
示例 2(时间未正确记录在数据库中)
$message_sql = "INSERT INTO lj_messages
(message_title, message_body, dm_recipient_id,
dm_sender_id, message_date)
VALUES (:message_title, :message_body, :dm_recipient_id,
:dm_sender_id, current_date )";
$stmt = $connection->prepare($message_sql);
$stmt->bindParam(':message_title', $dm_title);
$stmt->bindParam(':message_body', $dm_body);
$stmt->bindParam(':dm_recipient_id', $dm_recipient_id);
$stmt->bindParam(':dm_sender_id', $dm_sender_id);
$stmt->execute();
我完全不知道为什么会这样。
【问题讨论】:
因为current_date
就是:约会。为什么它在另一张桌子上工作,我不能说。如果您想要日期时间,请改用now()
。
@aynber - 感谢您解决了messages
表中的问题。为什么current_date
在用户表中的注册页面上工作?我不明白?
date_registered and last_login
是 DATE 类型而不是 DATETIME
@RiggsFolly 不,它在所有情况下都是 DATETIME 类型
仔细检查show create table `messages`
,看看这些字段是否有默认值。
【参考方案1】:
current_date
只返回一个日期:
mysql> select current_date;
+--------------+
| current_date |
+--------------+
| 2021-12-07 |
+--------------+
你想要now()
,它返回一个日期时间。
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2021-12-07 09:33:40 |
+---------------------+
【讨论】:
以上是关于MySQL DATETIME 在一个表中显示正确的日期,但在另一个表中显示不正确的时间(总是午夜)?的主要内容,如果未能解决你的问题,请参考以下文章
DataTable 不接受 MySQL 表中的 DateTime 字段