2011-07-30 30 views
2

我知道你在mysql中每个表只能有1个时间戳。但是我需要2.一个用于创建文章的时间,一个用于每次更新的时间。后者是大部分时间都会改变的那个,所以我决定把这个时间戳字段做出来。至于其他人,我怎么可以准备在PHP的时间,以便它看起来就像当插入到数据库中的时间戳:如何模拟MySQL表中的2个时间戳字段?

2011-07-29 03:28:20 

如果这个字符串在PHP编写,将格式化的常用方法工作,例如:

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

等一下,谁说你只能有一个时间戳列? – Shef

回答

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 
0

您可以在INSERTUPDATE查询使用MySQL功能NOW()

UPDATE table SET modified = NOW() WHERE id='$id' 
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.

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); 

第一个是理想的,如果你只有一次往返e数据库:一次插入所有数据。 第二个允许您将$now变量放置一段时间并重新使用它。例如,如果您要在循环中插入多个记录:您肯定知道它们都具有相同的时间戳。后者的另一个优点是数据库服务器和PHP之间的时间差别并不重要。

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