我有一个页面需要检查结果,我想出来的方式是成功的,但是遍历第一行结果。有没有一种方法可以在不迭代的情况下进行检查,或者在不再执行查询的情况下返回第一行?
我这样做:
$q = pdo::prepare($SQL);
$q->execute(array(':foo'=> foo, 'bar'=>bar);
if(!q->fetch){
//no results;
}else{
//results;
};
它几乎完全符合我的希望,其中包括跳过第一行结果的不幸副作用。
我第二次使用$ q-> execute()。有没有办法避免这样做?
答案 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!";