【问题标题】:What does PDO's `rowCount()` return if the MySQL query fails?如果 MySQL 查询失败,PDO 的 `rowCount()` 会返回什么?
【发布时间】:2013-10-23 13:03:39
【问题描述】:

我正在使用 PDO 和 MySQL 编写一些代码,并且需要非常确定 UPDATE 是否成功。

我希望更新 1 行,我正在使用 PDO 的 rowCount() 方法检查返回值 1。如果有 1 行或 0 行受到影响(“更新”或“未更新”),我知道该怎么做。

这会不会出错?例如,如果查询执行失败,它会返回什么?如果数据库以某种方式损坏或崩溃了怎么办?

【问题讨论】:

  • 检查execute()的返回值,看看查询是否失败不是更好吗?

标签: php mysql pdo


【解决方案1】:

如果查询失败,执行将返回 false。如果成功,则返回值将影响行数。它可以 >=0。不要使用 rowCount 来检查是否发生了更新,因为它应该总是返回一行,除非查询失败(由于错误)

sqrt(-1) loves php

【讨论】:

  • “它应该总是返回一行,除非查询失败”在我的情况下,还是总是? UPDATE ... WHERE 可以更新 N 行,所以 rowCount 应该返回 N,对吧?
  • 在更新的情况下 - 总是。如果你有 eh,那就是假的。语法错误或对不存在的表的引用等。至于您的评论,不完全是。例如,如果您将使用相同的数据更新行(因此实际上不会修改行),则受影响的行数将为 0。但通常是的,它将返回已修改行的计数。我认为应该有第二行应该指出where子句匹配了多少行-如果mysql工作台知道,这意味着DBMS必须提供有关响应的此类信息,但我从未使用过。
【解决方案2】:

在一个正确编写的应用程序中,它永远不会被执行 - 一个异常被触发并且处理程序只是杀死整个脚本。

【讨论】:

    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多