如何模拟MySQL表中的2个时间戳字段?

时间:2011-07-30 13:20:20

标签: php mysql

我知道你在mysql中每个表只能有1个时间戳。但我需要2.一个用于创建文章,一个用于每次更新。后者是大部分时间都会改变的,所以我决定把它作为时间戳字段。对于另一个,如何在PHP中准备时间,使其在插入数据库时​​看起来就像一个时间戳:

2011-07-29 03:28:20

如果这个字符串是用PHP编写的,那么通常的格式化方法是有效的,例如:

    $time = strtotime($timestamp);
    $date = date('n/d/Y @ g:i a', $time);

4 个答案:

答案 0 :(得分:4)

您不需要在此处涉及PHP。您可以在创建时间戳列上使用以下模式默认为NULL,并使用ON UPDATE CURRENT_TIMESTAMP作为更新列。

CREATE TABLE test.table (
  `row_inserted` TIMESTAMP NULL,
  `row_updated` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

这是从MySQL TIMESTAMP docs.

上的示例中复制而来的

答案 1 :(得分:0)

您可以使用datetime字段来存储插入时间(使用mysql的now()函数)。 使用时间戳字段来存储更新时间。

create table mytb (
id int not null auto_increment primary key,
article varchar(50),
ins_time datetime,
upd_time timestamp not null default current_timestamp on update current_timestamp
) engine = myisam;

insert into mytb (
article,ins_time) values ('bla bla bla', now());

update mytb set article = 'bla bla' where id = 1

答案 2 :(得分:0)

您可以在NOW()INSERT查询中使用MySQL函数UPDATE

UPDATE table SET modified = NOW() WHERE id='$id'

答案 3 :(得分:0)

您有两种选择:使用NOW()的SQL内部:

sprintf("UPDATE table SET modified = NOW() WHERE id=%d", $id);

或使用在PHP中创建的时间戳:

$now = time();
sprintf("UPDATE table SET modified =%d WHERE id=%d", $now, $id);

如果您只对数据库进行一次往返,则第一种方法是理想的:一次插入所有数据。 第二个允许您携带$now变量一段时间并重新使用它。例如,如果要在循环中插入多个记录:您确定它们都具有相同的时间戳。后者的另一个优点是数据库服务器和PHP之间的时差无关紧要。

注意:我使用sprintf来降低SQL注入的安全性。然而,这不是真实而可靠的安全性。您必须通过适当的数据库层自行处理清理数据。