使用PHP更新特定列时的MySQL时间戳

使用PHP更新特定列时的MySQL时间戳,php,mysql,timestamp,Php,Mysql,Timestamp,我想在更新特定列时加上时间戳 例如: column1: a value dateColumn1: date column1 was updated column2 : a value dateColumn2: date column2 was updated 我使用函数getTimestamp(),但它似乎不起作用 有谁能告诉我如何在PHP和MYSQL中做到这一点 谢谢 UPDATE table SET column1='new value', timestampcolumn=NOW(

我想在更新特定列时加上时间戳

例如:

column1: a value

dateColumn1: date column1 was updated


column2 : a value

dateColumn2: date column2 was updated
我使用函数
getTimestamp()
,但它似乎不起作用

有谁能告诉我如何在PHP和MYSQL中做到这一点

谢谢

UPDATE table
SET column1='new value', timestampcolumn=NOW()
WHERE ...
这是一种方法。如果您不介意在记录中的任何内容更新时更改时间戳,那么请使用本机“timestamp”字段类型,当插入或更改记录时,它会将自身更新为“now”


这是一种方法。如果您不介意在记录中的任何内容更新时更改时间戳,那么请使用本机的“timestamp”字段类型,当插入或更改记录时,它会将自身更新为“now”。

我更喜欢使用MySQL函数now(),如下所示:

UPDATE table1 SET column2 = value, dateColumn2 = NOW() WHERE somethingsomething

我更喜欢使用MySQL函数NOW(),如下所示:

UPDATE table1 SET column2 = value, dateColumn2 = NOW() WHERE somethingsomething

如果只想在数据库中执行此操作,可以编写一个触发器来检查您的条件,并在需要时更新特定的时间戳。但我假设你不想摆弄触发器。不过触发器有一个优点:您可以访问行的旧值和新值,而无需编写任何php代码

无论如何,如果您需要它,这里有一些触发器的示例代码(SQL,小心):

具有真实表名的子站点Table1、具有真实列名的column1等


另一种方法是比较php中的新旧值。例如,执行一个获取旧数据的查询,比较要检查的字段,然后对每个已更改的字段执行一个更新查询以设置新的时间戳。

如果您只想在数据库中执行此操作,您可以编写一个触发器来检查您的条件,并在需要时更新特定的时间戳。但我假设你不想摆弄触发器。不过触发器有一个优点:您可以访问行的旧值和新值,而无需编写任何php代码

无论如何,如果您需要它,这里有一些触发器的示例代码(SQL,小心):

具有真实表名的子站点Table1、具有真实列名的column1等


另一种方法是比较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 //
创建触发器更新\u密码
在更新用户之前
每行
开始
如果是OLD.password NEW.password,则
设置NEW.password_changed_on=NOW();
如果结束;
结束//

使用条件语句。例如,在以下触发器中,“密码更改时间”仅在密码列发生更改时更新

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 //
创建触发器更新\u密码
在更新用户之前
每行
开始
如果是OLD.password NEW.password,则
设置NEW.password_changed_on=NOW();
如果结束;
结束//

关于这一点,我们不妨看一看:如果您计划使用时间戳字段类型。因此,我不能使用时间戳字段类型,我必须使用Datetime,对吗?是的,时间戳将在行的任何更新中覆盖字段。如果您想自己控制,请使用DATETIME。@crashdOwn只有在您将其设置为这样做时,它才会自动更新。但是如果你只想手动控制,DATETIME是最好的选择。你可以通过将时间戳字段作为更新的一部分来覆盖它本身的更新<代码>已更新。。。设置timestampfield=timestampfield…,但是使用…=NOW()时,您的处境是一样的方法-必须根据是否更改要加时间戳的字段来手动调整查询。与此相关,看一看可能不会有什么坏处:如果您计划使用时间戳字段类型。因此我不能使用时间戳字段类型,我必须使用Datetime,对吗,时间戳将在行的任何更新中覆盖该字段。如果您想自己控制,请使用DATETIME。@crashdOwn只有在您将其设置为这样做时,它才会自动更新。但是如果你只想手动控制,DATETIME是最好的选择。你可以通过将时间戳字段作为更新的一部分来覆盖它本身的更新<代码>已更新。。。设置timestampfield=timestampfield…,但是使用…=NOW()时,您的处境是一样的方法-必须根据是否更改要加时间戳的字段手动调整查询。列是否必须为DATETIME或TIMESTAMP?取决于您要执行的操作:列是否必须为DATETIME或TIMESTAMP?取决于您要执行的操作: