检查PDO结果,如果无则显示消息,如果是则循环通过


Check for PDO Results, If None Display Message, If Yes then Loop Through

试图找到另一个简单的答案,但只找到复杂的例子。

我试着简单地查询一个表,如果有结果要显示,然后循环查看,如果没有,然后显示一条消息——不幸的是,我能找到的所有例子都是作为while循环的一部分"fetch",而不是之前,所以我试着做:

$stm = $PdoObj->prepare("SELECT * FROM NEWS_articles");
$stm ->execute();
$results = $stm ->fetch();
if($results==null){
    echo "<p>No dice, try other criteria</p>";
}else{
    foreach($results as $row){
        echo $row["articleName"];
    }
}        

以下问题接近我试图实现的目标,但从未得到令人满意的回答:是否可以在不迭代一行的情况下检查pdostatement::fetch()是否有结果?

您需要的不是fetch(),而是fetchAll()

如您的常识所述,使用fetchAll。如果没有任何结果,它将返回一个空数组:

$results = $stm->fetchAll();
if(empty($results))//or  if(!$results)  or  if(count($results)==0)  or if($results == array())
{
    echo 'Nothing found';
}
else
{
    foreach($results as $result)
    {
        //do stuff
    }
}

获取返回的行数的官方方法是rowCount():

$stm->execute();
if($stm->rowCount() == 0)
{
    echo 'Nothing found';
}
else
{
    //do your stuff
}

尽管如果您已经在调用fetchAll,则没有必要这样做,因为此结果可以用于确定结果集的大小。

使用fetchAll()而不是fetch()

fetchAll—返回一个包含所有结果集行的数组