php - 将 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
,还是应该以其他方式保存此日期?
解决方案
如果您阅读手册,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))
推荐阅读
- python - pymysql.err.InterfaceError: (0, '') 对 sql 表进行大量推送时出错
- c# - Unity - 后处理导致VR中的分屏?
- node.js - 在 NODEjs 上使用 directline 3.0 在网站上部署 azure bot
- python - 如何使用构造函数列表创建不同的对象
- python - 循环遍历文本文件并拆分为多个输出文件
- queue - Azure 函数和队列
- node.js - 通过Angular App和NodeJS向快递服务器发送GET / POST请求时如何修复404 Not Found
- python - 使用 mysql.connector.connect 的 Python 产生接口错误
- xml - Logstash XML 解析失败
- prolog - 如何迭代地使用 read_line_to_codes 和 atom_codes 来生成行数组作为我的 .txt 文件的字符串?