MySQL DATETIME 在一个 table 中显示正确的日期,但在另一个 table 中显示的时间不正确(总是午夜)?
MySQL DATETIME shows correct date, but incorrect time (always midnight) in one table but not in another table?
我正在使用 MySQL 的 DATETIME
在数据库中的两个不同 table 中设置日期和时间(使用 PHP)。其中一个实例在 users
table 中,并记录该人注册帐户的时间以及他们上次登录的时间。另一个用法在单独的 messages
table(在同一个数据库中)当一个用户向另一个用户发送消息时记录。
虽然MySQLDATETIME
的代码在每个table上都是一样的,但是在messages
table上记录的是日期,但是时间发送消息总是恰好在午夜,例如2021-12-06 00:00:00
在 PHPmyAdmin 中,我使用 DATETIME
,没有默认值,并且在两个 table 中都不为空。
每个用法的 PHP 准备语句如下。如您所见,我在需要数据和时间的地方使用 current_date
函数。
EXAMPLE 1 users
table(数据库中正确记录了时间)。注意:一些变量如 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
returns 只是一个日期:
mysql> select current_date;
+--------------+
| current_date |
+--------------+
| 2021-12-07 |
+--------------+
您想要 now()
,其中 returns 日期时间。
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2021-12-07 09:33:40 |
+---------------------+
我正在使用 MySQL 的 DATETIME
在数据库中的两个不同 table 中设置日期和时间(使用 PHP)。其中一个实例在 users
table 中,并记录该人注册帐户的时间以及他们上次登录的时间。另一个用法在单独的 messages
table(在同一个数据库中)当一个用户向另一个用户发送消息时记录。
虽然MySQLDATETIME
的代码在每个table上都是一样的,但是在messages
table上记录的是日期,但是时间发送消息总是恰好在午夜,例如2021-12-06 00:00:00
在 PHPmyAdmin 中,我使用 DATETIME
,没有默认值,并且在两个 table 中都不为空。
每个用法的 PHP 准备语句如下。如您所见,我在需要数据和时间的地方使用 current_date
函数。
EXAMPLE 1 users
table(数据库中正确记录了时间)。注意:一些变量如 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
returns 只是一个日期:
mysql> select current_date;
+--------------+
| current_date |
+--------------+
| 2021-12-07 |
+--------------+
您想要 now()
,其中 returns 日期时间。
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2021-12-07 09:33:40 |
+---------------------+