【问题标题】:Time format does not insert correctly into database时间格式未正确插入数据库
【发布时间】:2018-01-15 21:28:10
【问题描述】:

下面的代码以正确的格式添加日期,但小时/分钟/秒插入为 00:00:00。

$timestamp[] = 'date("2017-12-31 21:01:50")';

$i 因为我在 a 循环中有这个。

$sql = "INSERT INTO posts (post_id, username, content, timestamp, likes) 
VALUES ('$post_id[$i]', '$username[$i]', '$content[$i]', $timestamp[$i], 
'$likes[$i]')";

结果:

【问题讨论】:

  • 'date("2017-12-31 21:01:50")' 为什么是单引号?那些不应该在那里。
  • date() 的参数应该是格式字符串。
  • 你的日期函数应该是这样的date('Y-m-d H:i:s'),而作为@FunkFortyNiner,你为什么要用单引号括起来?它被视为一个字符串
  • 大概的想法是运行 mysql date() 函数,而不是 PHP 函数。问题在于该函数的全部意义在于只返回 date,而不是 datetime,这就是时间部分丢失的原因。
  • @iainn 对。我想说这离答案不远了。

标签: php database


【解决方案1】:

MySQL 的 date 函数返回一个日期没有时间部分,这就是它被截断到午夜的原因。

您应该能够完全忽略对date 的调用,而只需传递原始字符串——它已经在a format that MySQL will understand 中:

$timestamp[] = '2017-12-31 21:01:50';

$sql = "INSERT INTO posts (post_id, username, content, timestamp, likes) 
VALUES ('$post_id[$i]', '$username[$i]', '$content[$i]', '$timestamp[$i]', '$likes[$i]')";

(注意$timestamp 变量周围添加的引号)

您还应该考虑使用prepared statements,而不是手动构建 SQL 字符串。这既是安全性又是可读性的好处。

【讨论】:

  • 是的,在你发布这个之前想通了。我只是忽略了它并添加了你显示的简单字符串。我稍后不会对此做任何事情,因为我的帖子无论如何都会生成时间戳并将其添加到数据库中。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多