2011-07-30 28 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注入的最低安全性。然而,這並不是真實可靠的安全性。您必須通過適當的數據庫層來處理清理數據。