如何防止准备好的语句更新 TIMESTAMP 列?

Posted

技术标签:

【中文标题】如何防止准备好的语句更新 TIMESTAMP 列?【英文标题】:How do I prevent a prepared statement from updating TIMESTAMP column? 【发布时间】:2016-07-19 00:08:30 【问题描述】:

我的表中有一个 TIMESTAMP 列,用于存储用户的注册日期,当我从 Java 应用程序注销时,我有一个准备好的语句 REPLACE 查询更新除 TIMESTAMP 之外的所有内容。但是,TIMESTAMP 的默认值是 CURRENT_TIMESTAMP,这使它设置为我不想要的当前时间。如果我将默认值设置为 null,它将保存为 NULL,如果我不设置默认值,则会引发 SQL 异常。

如何使准备好的语句完全忽略该列?

【问题讨论】:

REPLACE 不会更新。它删除旧行并插入一个新行,该行获取默认值。您应该为此使用 UPDATE。 感谢您的帮助! :) 【参考方案1】:

如果您希望时间戳保持其当前值,则必须使用 UPDATE(而不是 REPLACE)或让 REPLACE 触发器执行读取-修改-写入,获取时间戳的当前值,然后将其写入返回新记录。

【讨论】:

感谢您的帮助! :)

以上是关于如何防止准备好的语句更新 TIMESTAMP 列?的主要内容,如果未能解决你的问题,请参考以下文章

更新数据库中的数据 - 准备好的语句(PHP)

带有变量的Mysqli准备好的语句列[重复]

使用检查样式防止准备好的语句泄漏

PHP:使用准备好的语句并防止 SQL 注入与逃逸

在 MySQL 中使用准备好的语句可以防止 SQL 注入攻击吗?

这个准备好的语句可以防止 SQL 注入吗? [复制]