PDO 两个查询,一个用于找到的行,另一个用于结果


PDO two queries, one for found rows other for results?

我目前在使用预准备语句时执行两个查询。 一个用于获取结果,另一个用于获取找到的行数。 我以前可以通过一个带有mysql_num_rows的查询来执行此操作。对于较大的查询,我不希望复制和粘贴查询并使用每个查询的 COUNT。 有没有办法像mysql_num_rows一样在一个查询中做到这一点?

 $connectdb->prepare("SELECT * FROM users WHERE username=:username");
        $connectdb->prepare("SELECT COUNT(*) FROM users WHERE username=:username");
    $query = $connectdb->execute(array(':username'=>$username));                                    
            $numrows = $query->fetchColumn();
             if($numrows!=0) {
               while(false !==($row = $query->fetch()))
               {

该语句已具有行计数:PDOStatement::rowCount()

因此,仅使用 $query->rowCount(); 和您的第一个查询

PS:你的代码看起来甚至不起作用。正确的应该是:

$stmt = $connectdb->prepare("SELECT * FROM users WHERE username=:username");
$stmt->execute(array(':username'=>$username));                                    
...
$query=$connectdb->prepare("SELECT * FROM users WHERE username=:username");
    $query->execute(array(':username'=>$username));                                    
            $numrows = $query->rowCount();

PDO中有3个选项可用:

1)您目前拥有的,通过使用COUNT()

$numrows = $query->fetchColumn();

2) fetchColumn()而不执行查询本身:

$pdo->query("SELECT COUNT(*) from users")->fetchColumn(); 

3)rowCount()注意 - 显然在MySQL中不起作用,我不建议这样做:

PDOStatement::rowCount();

编辑 - 澄清 - 第 3 条,这是来自 PDO 文档的参考:

对于大多数数据库,PDOStatement::rowCount() 不返回受 SELECT 语句影响的行数。相反,使用 PDO::query() 发出与预期 SELECT 语句具有相同谓词的 SELECT COUNT(*) 语句,然后使用 PDOStatement::fetchColumn() 检索将返回的行数。然后,应用程序可以执行正确的操作。

相关文章: