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

时间:2011-04-05 18:20:46

标签: php jquery mysql oop pdo

我刚刚更改了数据库连接。我还不习惯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 <的行数/ p>

1 个答案:

答案 0 :(得分:12)

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

您可能正在寻找rowCount,但该文档的文档说明:

  

如果执行的最后一条SQL语句   相关的PDOStatement是一个   SELECT语句,有些数据库可能   返回返回的行数   那句话。但是,这个   所有人都无法保证行为   数据库,不应该依赖   用于便携式应用。

如果你想要实际SELECT所有数据,那么长和短,你可以通过迭代结果集来可靠地确定返回的行数(或者只是调用{{3}并计算数组中的项目)。如果您不需要数据而只需要数字,请改用SELECT COUNT

因此,要在不更改查询的情况下计算行数:

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