【问题标题】:mysql # of affected rows not informativemysql # 受影响的行数不提供信息
【发布时间】:2017-08-19 19:24:22
【问题描述】:

如果没有符合条件的行或匹配的行实际上没有变化,MySQL 更新命令将报告零行受影响。

用户想要编辑他们的个人资料,因此我在数据库中查询"WHERE UserID='$userid'" 行,并在文本字段中显示一个包含每列值的表单供他编辑。

在提交时,我执行更新命令并检查 mysqli_affected_rows 预期 1 是否成功,0 是否失败。如果他实际上没有改变任何东西,它会返回0,我会得到一个错误的错误报告。

我可以想出一些麻烦的方法来避免这种情况,但我希望有人有一个简单的解决方案?

【问题讨论】:

  • 您可以添加一个始终更新的 updated_at 字段。也很常见。
  • 不通知用户。或添加特定通知 -> “您没有更改任何内容。”并按照 Christopher 的建议添加 updated_at 字段进行检查。
  • 是的,LastUpdate 列是我想到的“繁琐”方法。我只是讨厌弄乱代码并扩展数据库

标签: php mysqli


【解决方案1】:

返回零受影响的行实际上不是错误 - 许多事情没有任何影响,而实际的 SQL 查询仍然成功。当 mysqli_affected_rows 报告实际错误时,它会返回 -1,而不是 0。

此外,如果您想捕获实际错误,您可能需要使用 mysqli_errno 或类似的命令,尤其是在 mysqli_affected_rows 返回 -1 之后。

我建议你简单地告诉用户“OK”/“Thank you”或类似的,并且仅在实际错误的情况下通知。

【讨论】:

    【解决方案2】:

    这很简单。

    只需摆脱这种无用的检查,只需告诉用户他的数据已成功更新。

    【讨论】:

    • 不太可能出现任何问题,但不检查似乎有点草率。
    • @joseph4 您只需要意识到受影响的行数与出现问题无关。如果要检查,则必须检查是否出现问题,而不是检查受影响的行数。
    • 但是,如果您要检查每一行以查看它是否出错,它会使您的代码有点混乱。
    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 2016-02-01
    • 2016-10-29
    • 2014-06-02
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多