首页 > 解决方案 > 将 PHP DateTimeInterface 保存到 MySQL 结果为 0000-00-00 00:00:00

问题描述

如果我有一个接受 a 的方法\DateTimeInterface,那么将该值保存到 MySQL 列中的最佳方法是什么?

现在,我的date_due列的数据类型是TIMESTAMP:当我执行这个查询时,date_due显示为0000-00-00 00:00:00.

public function queueMessage(array $message, \DateTimeInterface $date_due) {

    $stmt = $this->pdo->prepare("INSERT INTO `table_name` (message, date_due) values (:message, :date_due)");

    $stmt->execute([
         ':message' => json_encode($message),
        ':date_due' => $date_due->getTimestamp()
    ]);

}

这会是最佳做法吗?该date_due列应该是 a DATETIME,还是应该以其他方式保存此日期?

标签: phpmysql

解决方案


如果您阅读手册,DateTime::getTimestamp()会返回该日期的 Unix 时间戳。

$date_due->getTimestamp();  // Returns unix timestamp, e.g. '1600349549'

要保存到您的 SQLDATETIME字段,您需要在 PHP 中正确格式化日期,然后保存:

$date_due->format('Y-m-d H:i:s');  // Returns '2020-09-17 06:34:24'

或者,您可以使用 PHP 中的 Unix 时间戳,但您需要使用FROM_UNIXTIME()在 SQL 本身中正确转换它。

例如

INSERT INTO my_table (id, date_due) VALUES (1, FROM_UNIXTIME(1600349549))

推荐阅读