是否有可能检查pdostatement :: fetch()是否有结果而不迭代一行?

时间:2009-10-12 20:26:10

标签: php mysql pdo

我有一个页面需要检查结果,我想出来的方式是成功的,但是遍历第一行结果。有没有一种方法可以在不迭代的情况下进行检查,或者在不再执行查询的情况下返回第一行?

我这样做:

 $q = pdo::prepare($SQL);
 $q->execute(array(':foo'=> foo, 'bar'=>bar);
 if(!q->fetch){
     //no results;
 }else{
      //results;
 };

它几乎完全符合我的希望,其中包括跳过第一行结果的不幸副作用。

我第二次使用$ q-> execute()。有没有办法避免这样做?

4 个答案:

答案 0 :(得分:4)

只需将获取结果放入变量:

if($row = $q->fetch()) {
    // $row contains first fetched row
    echo $row['coloumn_name'];
}
else
    // no results

答案 1 :(得分:2)

如果你想懒惰,你总是可以这样做:

$totalRows = count($resultSet->fetchAll());

但是,这对于大型结果集来说效率不高。

否则,请参阅手册page about rowCount()(特别是示例#2),了解似乎是标准的解决方法。该页面上还有一些有趣的用户提供的评论。

答案 2 :(得分:0)

可能你会发现SELECT FOUND_ROWS()对此有用。请参阅php.net网站http://www.php.net/manual/en/ref.pdo-mysql.php#77984

上的示例

答案 3 :(得分:0)

已知rowCount()可以使用mysql,因此如果不考虑可移植性,请使用它。

否则,您可以尝试更改程序逻辑,例如

    $stmt->execute();

    $count = 0;
    foreach($stmt as $record) {
        // output...
        $count++;
    }

    if(!$count)
        echo "no results!";