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

gan*_*jan 1 php mysql oop jquery 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() );
        }
Run Code Online (Sandbox Code Playgroud)

我试图从此查询中获取行数:

    $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() ); 
    }
Run Code Online (Sandbox Code Playgroud)

phpmyadmin我得到的结果,所以我的查询是正确的,但$n就是NULL因为某些原因..我如何获得的行数与PDO

Jon*_*Jon 12

$stmt是类型的PDOStatement.那堂课没有num_rows财产.

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

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

如果你想要实际上SELECT所有那些数据,你可以通过迭代结果集来确定返回的行fetchAll数(或者只是调用和计算数组中的项目).如果您不需要数据而只需要数字,请SELECT COUNT改用.

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

$result = $stmt->execute();
$rows = $stmt->fetchAll(); // assuming $result == true
$n = count($rows);
Run Code Online (Sandbox Code Playgroud)

  • @Charles:只有很多方法可以给猫皮肤......*非常相似的反应.如果只是因为受到如此纪律处分我会得到任何机会:) (3认同)