【问题标题】:TIMESTAMP on UPDATE doesn't work with PHPUPDATE 上的 TIMESTAMP 不适用于 PHP
【发布时间】:2016-01-18 12:08:18
【问题描述】:

我有一个 feeddate 列,其中包含以下信息..

类型:时间戳
属性:更新 CURRENT_TIMESTAMP
默认值:CURRENT_TIMESTAMP

当我使用 PHP INSERT INTO 带有此代码的行时..

$badgefeed = "INSERT INTO d VALUES ('','".$userID."','Badge','','".$badgeNAME."','".$badgeTYPE."','".$badgelv."','','')";
$badgefeedQ = mysql_query($badgefeed);

(feeddate 在最后一列NULL)

这个 feeddate 不会更新,就像 0000-00-00 00:00:00
但是当我使用 PHP UPDATE 表中已有的内容时它会起作用。

我的 feeddate 结构是否有任何问题或 INSERT 代码不正确?

【问题讨论】:

  • '' 中使用null。这样它就会正确更新。
  • @AlexTartan 不,null 不会导致在插入时为该列设置默认值。必须省略
  • @AlexTartan 嘿,非常感谢。这是工作!
  • @NongkarnttNitchkarnt,添加了答案和一些解释。很高兴它有帮助!

标签: php mysql timestamp


【解决方案1】:

您的查询应该是:

$badgefeed = "INSERT INTO d VALUES ('','".$userID."','Badge','','".$badgeNAME."','".$badgeTYPE."','".$badgelv."','')";

不要对最后一列使用任何值,因为您在 MySQL 中使用时间戳作为默认值。只需从查询中省略最后一个(空白)值。这样,相关列的值将被视为空值,因此将使用默认的时间戳。

【讨论】:

  • 您需要指定列列表才能在插入语句中工作。如果省略列列表,则需要为每个列指定一个值。
【解决方案2】:

'' 使用 null
这样,mysql 自己管理值。

如果您指定任何值,服务器将采用您的值,而不管其他触发器、设置。

如果您没有在插入语句中包含该列或将其留空(null),它将由服务器根据默认设置进行设置。在这种情况下,默认值为on update CURRENT_TIMESTAMP

【讨论】:

  • 只有一个问题:如果时间戳字段可以为空,则此解决方案将值设置为空,而不是插入时的实际时间戳。最安全的方法是完全省略插入语句中的字段。
  • @Shadow,是的!但在这种情况下,default : CURRENT_TIMESTAMP,它是安全的
  • 默认值和可空是两种不同的动物!
  • 引用 mysql 文档中关于自动初始化和更新 TIMESTAMP 和 DATETIME 的内容:“此外,您可以通过为其分配 NULL 值来初始化或更新任何 TIMESTAMP 列到当前日期和时间,除非它具有已使用 NULL 属性定义以允许 NULL 值。" dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
猜你喜欢
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
相关资源
最近更新 更多