0

我目前在使用准备好的语句时做了两个查询。一个用于获取结果,另一个用于获取找到的行数。我以前可以用一个查询来做到这一点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()))
               {
4

3 回答 3

1

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

所以$query->rowCount();只使用你的第一个查询

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

$stmt = $connectdb->prepare("SELECT * FROM users WHERE username=:username");
$stmt->execute(array(':username'=>$username));                                    
...
于 2012-07-04T04:37:00.027 回答
1
$query=$connectdb->prepare("SELECT * FROM users WHERE username=:username");
    $query->execute(array(':username'=>$username));                                    
            $numrows = $query->rowCount();
于 2012-07-04T04:39:30.257 回答
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 COUNT(*) 语句,其谓词与预期的 SELECT 语句相同,然后使用 PDOStatement::fetchColumn() 检索将返回的行数。然后,您的应用程序可以执行正确的操作。

于 2012-07-04T04:43:59.650 回答