【发布时间】: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`,看看这些字段是否有默认值。
标签: php mysql date phpmyadmin