我知道你在mysql中每个表只能有1个时间戳。但我需要2.一个用于创建文章,一个用于每次更新。后者是大部分时间都会改变的,所以我决定把它作为时间戳字段。对于另一个,如何在PHP中准备时间,使其在插入数据库时看起来就像一个时间戳:
2011-07-29 03:28:20
如果这个字符串是用PHP编写的,那么通常的格式化方法是有效的,例如:
$time = strtotime($timestamp);
$date = date('n/d/Y @ g:i a', $time);
答案 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
)
上的示例中复制而来的
答案 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注入的安全性。然而,这不是真实而可靠的安全性。您必须通过适当的数据库层自行处理清理数据。