检查PDO查询是否返回结果

时间:2015-07-21 10:27:16

标签: php mysql pdo

假设我有这段代码:

foreach($creds as $cred){
    $prev_fut = $pdo->query("SELECT importo FROM incassi_prev WHERE
    data_prev='$data_fut' AND incasso=0 AND
    id_cre='{$cred['id_cre']}'")->fetch();
    if(count($prev_fut)>0){
        //I have found a result
    }else{
        //I have found nothing
    }
}

注意:这是我的应用程序的内部查询,没有用户发布数据,所以我不担心SQL注入。

我用来检查是否count($prev_fut)>0以查看查询是否返回数据(如果我在db中找到带有这些标准的任何行)。 我的问题是:

  

这个检查是否足以验证查询是否至少有结果?是否更好地执行任何其他检查?

问题主要来自于我对for循环中的这个问题的看法,并且与在开始新的for循环迭代之前清空/取消设置$ prev_fut数组的选项有关。

1 个答案:

答案 0 :(得分:2)

fetchColumn返回结果集中下一行的单个值。 count计算数组的长度。由于fetchColumn无法返回数组(对于大多数数据库实现),因此使用count是错误的。您想测试$prev_fut是否falsefalse表示无法获取任何结果,而其他任何内容表示已获取结果:

if ($prev_fut !== false) ..

话虽如此,你应该在数据库中使用COUNT()并检查该值:

$result = $pdo->query('SELECT COUNT(*) FROM ...')->fetchColumn();
if ($result > 0) ..

使用数据库计算和汇总结果要比将整个结果集提取到PHP只是为了这个简单的检查要高效得多。