假设我有这段代码:
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数组的选项有关。
答案 0 :(得分:2)
fetchColumn
返回结果集中下一行的单个值。 count
计算数组的长度。由于fetchColumn
无法返回数组(对于大多数数据库实现),因此使用count
是错误的。您想测试$prev_fut
是否false
。 false
表示无法获取任何结果,而其他任何内容表示已获取结果:
if ($prev_fut !== false) ..
话虽如此,你应该在数据库中使用COUNT()
并检查该值:
$result = $pdo->query('SELECT COUNT(*) FROM ...')->fetchColumn();
if ($result > 0) ..
使用数据库计算和汇总结果要比将整个结果集提取到PHP只是为了这个简单的检查要高效得多。