代码之家  ›  专栏  ›  技术社区  ›  Chris Sobolewski

是否可以检查pdostatement::fetch()是否有结果,而无需遍历行?

  •  4
  • Chris Sobolewski  · 技术社区  · 16 年前

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

    我是这样做的:

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

    4 回复  |  直到 16 年前
        1
  •  3
  •   rojoca    16 年前

    只需将fetch的结果放入一个变量:

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

    如果你想变得懒惰,你可以做如下事情:

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

    但是,对于大型结果集,这种方法的效率较低。

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

        3
  •  0
  •   Ivan Nevostruev    16 年前

    SELECT FOUND_ROWS() 这是有用的。请参见php.net站点上的示例 http://www.php.net/manual/en/ref.pdo-mysql.php#77984

        4
  •  0
  •   user187291    16 年前

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

        $stmt->execute();
    
        $count = 0;
        foreach($stmt as $record) {
            // output...
            $count++;
        }
    
        if(!$count)
            echo "no results!";
    
    推荐文章