3

我有一个带有字段的表:

'last_modified - 时间戳不为空'

  • 我将默认值设置为当前时间戳。但是,这只适用于从 phpMyAdmin 而不是我的脚本更新或插入时。

我试过了

$sql = sprintf("UPDATE %s SET timestamp=now(), %s WHERE id='%s'", $table, $implodeArray, $_POST['id']);

它似乎仍然不起作用。当我从脚本更新或按表插入时,如何进行时间戳更新?

还有一个脚本输出示例:

UPDATE about SET timestamp=now(), page_header = 'Page header goes here', sub_header = 'Sub header goes here', content_short = '这是关于页面的简短描述', content = '这是完整的内容描述去'WHERE id='1'

4

4 回答 4

9

可能是我看错了,但是您的列名是last_modified(键入timestamp),所以查询应该是:

UPDATE about SET last_modified=now(), 
page_header = 'Page header goes here', 
sub_header = 'Sub header goes here', 
content_short = 'This is where a short description of the about page goes', 
content = 'This is where the full content description goes' 
WHERE id='1'
于 2012-07-03T13:19:22.210 回答
1

如果您使用保留字作为表或列名,那么您需要引用它

$sql = sprintf("UPDATE %s SET `timestamp`=now(), %s WHERE id='%s'", $table, $implodeArray, $_POST['id']);

在这种情况下,您使用时间戳作为列名,因此您需要引用它

要自动更新时间戳,如果您只有 1 个时间戳列,您可以依赖 mysql 本身,或者您可以ON UPDATE CURRENT_TIMESTAMP在定义时间戳列时添加,有关更多信息,请参阅TIMESTAMP 初始化

于 2012-07-03T13:02:42.847 回答
0

如果您想在每次记录发生某些事情时更新时间戳(即最后修改的日期/时间),那么最好将其保留在数据库中。您不能依赖字段定义中的默认值,因为它仅适用于 INSERT(创建记录/字段时),使用 SET last_modified=GETDATE() [或 GETUTCDATE()] 实际功能可能会因您的实际 SQL 而异服务器。

并且“Ivan Buttinoni”是绝对正确的,包括我在内的任何人都没有注意到它 - 你的字段名称是错误的,但上述评论仍然适用。

于 2012-07-03T13:32:35.080 回答
0

如果您有类似框架的东西不允许“现在()”这个字段 - 只需将字段设置为 NOT NULL 并在保存之前将 PHP 变量(模型->字段)设置为 null ..

于 2013-09-27T12:56:20.790 回答