脚本宝典收集整理的这篇文章主要介绍了php – timestamp autoupdate无法使用ON DUPLICATE KEY UPDATE(PDO),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
current_TIMESTamP ON UPDATE CURRENT_TIMESTAMP
PHP中的PDO语句不会导致时间戳更新.
$statement = $this->connection->PRepare(" INSERT INTO folio(publication,productId) VALUES(:publication,:productId) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id),publication=:publication,productId=:productId");
以下手动方法有效但不可取.
$statement = $this->connection->prepare( "INSERT INTO folio(publication,productId=:productId,timestamp=Now()");
更新:这是我的作品集表结构
CREATE TABLE `folio` ( `id` int(11) NOT NULL AUTO_INCREMENT,`publication` vArchar(255) DEFAULT NULL,`productId` VARchar(255) DEFAULT NULL,`timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,Primary KEY (`id`),unique KEY `unique_folio` (`publication`,`productId`) ) ENginE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
更新2:将timestamp设置为not null后的表结构
CREATE TABLE `folio` ( `id` int(11) NOT NULL AUTO_INCREMENT,`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`productId`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
`timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
尝试使其为NOT NULL – 因为你有它的有效默认值,MysqL不会抱怨你没有提供查询中的值:
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
另外,尝试将时间戳字段重命名为更合理的东西,例如:
`changed_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
另外,正如我的评论中所述 – 您不需要提供ON DUPLICATE KEY部分中的所有字段,而只需要提供数据字段:
INSERT INTO folio(publication,:productId) ON DUPLICATE KEY UPDATE publication=:publication,productId=:productId
这是因为如果MysqL检测到您有重复的键条件,它将不会插入新行,而是更新现有的行,因此必须保持id列不变.
UPDATE
似乎没有更新时间戳列是记录的行为 – MySQL manual for TIMESTAMP columns
引用所需的段落:
因此,您满足所有条件:) – 当您插入记录时,应正确填充时间戳.
但是,当您按顺序提供重复值以更新时间戳时,MysqL会看到您设置行中已存在的值(否则它不会重复),因此它不会更新时间戳列.
因此,解决方案很简单并且已经找到了 – 每当您提供重复值时,都会显式更新时间戳列,例如:
INSERT INTO folio(publication,:productId) ON DUPLICATE KEY UPDATE `timestamp` = Now()
无论如何,使时间戳NOT NULL不会受到伤害.
以上是脚本宝典为你收集整理的php – timestamp autoupdate无法使用ON DUPLICATE KEY UPDATE(PDO)全部内容,希望文章能够帮你解决php – timestamp autoupdate无法使用ON DUPLICATE KEY UPDATE(PDO)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。