【问题标题】:What are the equivalent function mysqli::afftected_rows and mysqli_result::num_rows in PHP PDO? [duplicate]PHP PDO 中的等效函数 mysqli::afftected_rows 和 mysqli_result::num_rows 是什么? [复制]
【发布时间】:2017-09-27 07:40:21
【问题描述】:

我假设affected_rows 返回最后一个查询中受影响的行数(例如UPDATE),num_rows 返回结果集中的行数(例如SELECT)。

我应该在 PDO 中使用什么?

PDOStatement::rowCount 返回该语句中受影响的行数,但对于大多数数据库不返回受SELECT 影响的行数。

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    official documentation中提到

    如果关联的 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,某些数据库可能会返回行数 由该语句返回。但是,不能保证这种行为 适用于所有数据库,不应依赖于便携式 应用程序。

    可以通过添加SQL_CALC_FOUND_ROWS 来强制匹配行数,如FOUND_ROWS 的MySQL 文档中所述

    Paul Dixon 已经有相关的related answer 解释了一些细节

    【讨论】:

    • 我只有执行后的语句。
    • @TheDeveloper 但你可以在之后执行FOUND_ROWS()
    【解决方案2】:

    相当于affected_rows: rowCount() http://php.net/manual/de/pdostatement.rowcount.php

    如果您想要选择的行数,请执行 count()。

    也作为参考: PHP PDO - Num Rows

    【讨论】:

    • 如果语句已经执行,我无法执行计数(*)。我正在为 PDO 编写一个包装器,我需要函数“numRows”将语句作为输入传递。
    • 如果我有一个“Storage”类是一个单例并且可以存储到数据库(因此它将使用 PDO)但可以存储到文件(因此它将使用文件)等等,这很有用上。用户使用我的课程并只调用“保存/加载”,我将根据我使用的内容使用 PDO/文件/其他。
    • 我需要它。不懂我的项目逻辑,凭什么说没用?
    • @TheDeveloper 因为我是 PHP 相关迷信的专家,而 numRows 就是其中之一。每个 numRows() 用例要么有害,要么毫无意义,没有例外。
    • @YourCommonSense。不。我认为我的目标是:我有一个特定的要求,我需要实现这个功能以实现向后兼容性。这并不意味着我会使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2011-09-26
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多