【问题标题】:MySQL timestamp record being updated but affected rows remains 0MySQL 时间戳记录正在更新,但受影响的行仍然为 0
【发布时间】:2011-11-22 05:54:50
【问题描述】:

有几个类似的问题,但我会把这个混在一起。

基本上,我有一个时间戳列(它是一个 int),我的更新之一只是更新这个时间戳列,有时它几乎没有明显的距离。例如,它可能从 1316631442 变为 1316631877。两者之间并没有太大的区别。

所以记录正在更新,我可以在查询运行之前检查 phpMyAdmin,然后再查看差异。但是,我正在对受影响的行数执行 var_dump(),它仍然为 0。

如果我同时将另一列更新为不同的值,则受影响的行数为 1。

那么如何触发受影响的行?即使更新成功后受到影响。

另外,我正在使用 Laravel PHP 框架及其查询构建器。目前正在那里进行一些调试,看看是否有问题,但到目前为止一切似乎都很好。

编辑:对不起,我在上面输入了错误的内容。当我完全更改另一列的值时,受影响的行是 1,而不是 0。

【问题讨论】:

  • 该行是由ON UPDATE CURRENT_TIMESTAMP 更新还是由您的查询明确设置?
  • 它是通过查询明确设置的,如果有区别的话,使用 PHP 的 time()。
  • 更新后您的框架是否会自行执行另一个查询?
  • @ceejayoz 我的想法完全正确。
  • @ceejayoz 我已经转储了在运行此查询之后执行的查询数组,它是列出的最后一个查询,因此它没有运行另一个查询。

标签: php mysql pdo timestamp laravel


【解决方案1】:

对于那些好奇的人,我求助于使用 INSERT INTO... ON DUPLICATE KEY UPDATE 来实现所需的结果。我仍然无法弄清楚为什么 MySQL 没有报告记录受到影响。

我也尝试使用 PHP 的 mysql_query() 和相关函数来检查受影响的行,但它也没有像那样工作。也许 MySQL 不认为该更改值得将记录标记为受影响。

【讨论】:

    【解决方案2】:

    我可以用 MySql 5.1 复制这个问题,但不能用 Mysql 5.7。

    在早期版本中

    UPDATE `test`
    SET
        `time` = TIMESTAMPADD(MINUTE, 10, NOW())
    WHERE
        `id = 1
    

    确实更新了时间戳,但消息是零行已受到影响。

    对于更高版本的 MySql,相同的查询会影响我一行。

    好像是MySql的一个bug,已经修复了。

    是时候让服务器管理员更新一些东西了?

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      相关资源
      最近更新 更多