在 php 中使用 PDO 类获取 num_rows 的问题

Posted

技术标签:

【中文标题】在 php 中使用 PDO 类获取 num_rows 的问题【英文标题】:problem getting num_rows with PDO class in php 【发布时间】:2011-07-30 05:12:42 【问题描述】:

我刚刚更改了我的数据库连接。我还不习惯 PDO 类或 OOP。无论如何,我像这样连接到数据库:

        $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;
        try
        
            $this->db = new PDO($dsn, DB_USER, DB_PASS);
        
        catch ( Exception $e )
        
            die ( $e->getMessage() );
        

我正在尝试从此查询中获取行数:

    $ip = $this->ip(); 
    $sql = "SELECT `id` FROM `login_failed`
            WHERE `ip` = :ip AND `time` BETWEEN NOW( ) - INTERVAL 120 MINUTE AND NOW( )
            LIMIT 3";
    try 
    
        $stmt = $this->db->prepare($sql);
        $stmt->bindParam(':ip', $ip, PDO::PARAM_STR);
        $result = $stmt->execute(); // $result = true
        $n = $stmt->num_rows ; // n = NULL?
        $stmt->closeCursor(); 
           
    catch (Exception $e)
    
        die ($e->getMessage() ); 
    

phpmyadmin 中,我得到一个结果,所以我的查询是正确的,但由于某种原因,$nNULL。我如何使用PDO 获取行数

【问题讨论】:

【参考方案1】:

$stmt 的类型为 PDOStatement。该类没有num_rows 属性。

您可能正在寻找 rowCount,但相关文档指出:

如果执行的最后一条 SQL 语句由 相关的 PDOStatement 是 SELECT 语句,某些数据库可能 返回由返回的行数 那句话。然而,这 不能保证所有人的行为 数据库,不应依赖 用于便携式应用程序。

如果是这样的长短,如果你想实际SELECT所有这些数据,你可以可靠地确定通过迭代结果集返回了多少行(或者只是调用fetchAll并计算数组中的项目)。如果您不需要数据而只需要一个数字,请改用SELECT COUNT

所以,在不改变查询的情况下计算行数:

$result = $stmt->execute();
$rows = $stmt->fetchAll(); // assuming $result == true
$n = count($rows);

【讨论】:

+1 比我快,同时还设法包含 rowCount 免责声明。 @Charles:给猫剥皮的方法只有这么多……非常类似的反应。只要有纪律,只要有机会,我都会给你投票 :)

以上是关于在 php 中使用 PDO 类获取 num_rows 的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PDO 在 PHP 中获取结果数组?

如何使用 PDO 在 PHP 中获取结果数组?

如何使用PDO在PHP中获取结果数组?

在 PHP 中,是不是可以使用 PDO 获取一维数组? [复制]

在 PHP 中,当将 PDO 与 pgSQL 一起使用时,如何在原始 INSERT sql 查询中获取“RETURNING”子句的值

如何在使用 PHP-PDO 记录查询时获取最后一个插入 ID