我想在更新特定列時放置時間戳。用PHP更新特定列時的MySQL時間戳
例如
列1:值 dateColumn1:日期COLUMN1被更新 列2:值 dateColumn2:日期列2進行了更新
我使用功能getTimestamp(),但它不似乎工作。
任何人都可以告訴我如何在PHP和MYSQL中做到這一點?
感謝
我想在更新特定列時放置時間戳。用PHP更新特定列時的MySQL時間戳
例如
列1:值 dateColumn1:日期COLUMN1被更新 列2:值 dateColumn2:日期列2進行了更新
我使用功能getTimestamp(),但它不似乎工作。
任何人都可以告訴我如何在PHP和MYSQL中做到這一點?
感謝
UPDATE table
SET column1='new value', timestampcolumn=NOW()
WHERE ...
是單向的。如果您不介意隨時更改記錄中的任何內容的時間戳,請使用本機「時間戳」字段類型,該記錄插入或更改後將自動更新爲「now」。
我更喜歡使用MySQL的函數NOW(),像這樣:
UPDATE table1 SET column2 = value, dateColumn2 = NOW() WHERE somethingsomething
列是否必須是DATETIME或TIMESTAMP? –
取決於你想要做什麼:http://dev.mysql.com/doc/refman/5.0/en/timestamp.html –
如果希望只在數據庫中要做到這一點,你可以寫檢查您的情況,如果需要更新的具體時間戳觸發。但我假設你不想擺弄觸發器。但觸發器有一個優點:您可以訪問一行的舊值和新值,而無需編寫任何PHP代碼。
無論如何,如果你需要它這裏是觸發一些示例代碼(SQL,謹防):
DELIMITER $$
DROP TRIGGER IF EXISTS Table1_UpdateTrigger $$
CREATE TRIGGER Table1_UpdateTrigger BEFORE UPDATE ON Table1
FOR EACH ROW BEGIN
IF OLD.column1 != NEW.column1 THEN
SET NEW.dateColumn1 = NOW();
END IF;
IF OLD.column2 != NEW.column2 THEN
SET NEW.dateColumn2 = NOW();
END IF;
END;
$$
DELIMITER ;
Substite表1與你的真實的表名,列1等與真正的列名。
另一種方法是比較php中的舊值和新值。例如。做一個查詢獲取舊數據,比較你想檢查的字段,然後對每個已更改的字段執行一次更新查詢以設置新的時間戳。
使用條件語句。例如,在以下觸發器中,只有當密碼列有更改時,纔會更新「密碼更改時間」。
CREATE TRIGGER update_password
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
IF OLD.password <> NEW.password THEN
SET NEW.password_changed_on = NOW();
END IF;
END //
與此相關,它可能不會傷害看看這個:http://dev.mysql.com/doc/refman/5.0/en/timestamp.html如果你打算使用時間戳記字段類型。 – Christa
所以我不能使用時間戳字段類型,我必須使用日期時間嗎? –
是的,TIMESTAMP將在該行的任何更新上覆蓋該字段。如果您想自己控制,請使用DATETIME。 –