【问题标题】:PDOStatement::rowCount result when used after PDO::commit?在 PDO::commit 之后使用 PDOStatement::rowCount 结果?
【发布时间】:2012-04-22 21:06:27
【问题描述】:

在 MySQL 文档中,有一条关于在事务提交后使用 mysql_affected_rows 的说明: http://php.net/manual/en/function.mysql-affected-rows.php

注意:交易
如果您使用事务,则需要在 INSERT、UPDATE 或 DELETE 查询之后调用 mysql_affected_rows(),而不是在 COMMIT 之后。

但是,PDOStatement::rowCount 文档中没有这样的注释: http://www.php.net/manual/en/pdostatement.rowcount.php

这是否意味着在使用 PDO 对象时,在 INSERT、UPDATE 或 DELETE 查询之后提交不会影响受影响的行数?

【问题讨论】:

  • 提交后,affected_rows 的含义变得不清楚。是整个事务影响的总行数吗?还是只是事务中最后一个操作完成的行数?如果存在回滚的嵌套事务,是否还应计算任何受影响/撤消的行,等等...
  • @MarcB 问题是,它是一个PDOStatement->rowCount(),即不是PDO->rowCount(),因此它应该对最后一个查询而不是最后一个事务进行行计数。
  • mysql_affected_rows() 是执行 PDOStatement->rowCount() 的另一种方式。两者都只能在 MySQL 完成后调用,否则不会影响任何行。
  • 感谢@daemonfire300,但我相信您可能错过了问题的重点,即在使用事务时调用 PDO->rowCount() 的正确方法是什么。跨度>

标签: php mysql transactions pdo pdostatement


【解决方案1】:

每个执行的查询都会返回一个 PDOStatement。您可以随时在代码中使用 PDOStatement->rowCount()(在事务期间或之后,回滚/提交无关紧要)。每个对象都负责维护自己。

mysql_affected_rows 有该事务注释的原因是因为它只知道单个 mysql 连接资源。这意味着当您完成事务(提交/回滚)时,新查询已发送到数据库,从而改变正在处理受影响行数的结果。

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多