PDO两个查询,一个用于查找结果的其他行?

时间:2012-07-04 04:34:31

标签: php mysql

我在使用预准备语句时目前会进行两次查询。一个用于获取结果,另一个用于获取找到的行数。我之前可以使用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()))
               {

3 个答案:

答案 0 :(得分:1)

该陈述已包含行数:PDOStatement::rowCount()

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

PDO中有3个选项:

1)您目前使用的COUNT()

$numrows = $query->fetchColumn();

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

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

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

PDOStatement::rowCount();

编辑 - 澄清 - 第3号,这是来自PDO Doc的参考:

  

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