You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PDO预处理UPDATE语句未指定datetime列却自动更新该列?

为什么我的PDO更新语句会自动修改未提及的datetime列?

别担心,这可不是你的PHP/PDO代码出问题了——问题根源在数据库表的列属性设置上!

你表中的lastLoginDate列,大概率被配置了ON UPDATE CURRENT_TIMESTAMP的属性(常见于MySQL这类数据库)。这个属性的作用是:当你对该行的任意字段执行UPDATE操作时,数据库会自动把这个列的值更新为当前时间,哪怕你的UPDATE语句里根本没提到它。

怎么验证这个猜测?

登录你的数据库,执行这条SQL语句查看表结构:

SHOW CREATE TABLE users_edi;

在输出的表结构定义里,找到lastLoginDate列,你会看到类似这样的配置:

lastLoginDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

重点就是ON UPDATE CURRENT_TIMESTAMP这部分——它就是自动更新的触发源。

如何解决这个问题?

如果你不希望这个列在更新其他字段时自动变化,需要修改表结构移除这个属性:

ALTER TABLE users_edi MODIFY COLUMN lastLoginDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

(如果这个列原本没有DEFAULT CURRENT_TIMESTAMP的默认值,就去掉这部分,保留你实际需要的默认配置即可)

补充一句:这种ON UPDATE的设计通常是用来记录行的最后修改时间的,但如果不符合你的业务需求,调整表结构就能解决问题。你的PDO代码本身完全没问题,它只是执行了你指定的更新操作,自动更新是数据库层面的内置逻辑。

内容的提问来源于stack exchange,提问作者John Beasley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:29:57