У меня есть страница, которая должна проверять результаты, и способ, которым я пришел, сделать это успешно, но выполняет итерацию в первой строке результатов. Есть ли способ, который я могу проверить без повторения, или вернуться к этой первой строке без повторного выполнения запроса?
Я делал это:
$q = pdo::prepare($SQL); $q->execute(array(':foo'=> foo, 'bar'=>bar); if(!q->fetch){ //no results; }else{ //results; };
Он делает в значительной степени то, что я надеялся, с неудачной стороной, пропуская первый ряд результатов.
Я прибегал к запуску $ q-> execute () во второй раз. Есть ли способ избежать этого?
Просто поместите результат извлечения в переменную:
if($row = $q->fetch()) { // $row contains first fetched row echo $row['coloumn_name']; } else // no results
Если вы хотите быть ленивым, вы всегда можете сделать что-то вроде:
$totalRows = count($resultSet->fetchAll());
Однако это не так эффективно для больших наборов результатов.
В противном случае см. Страницу руководства о rowCount () (особенно пример № 2) для того, что, как представляется, является стандартным обходным решением. На этой странице также есть интересные комментарии пользователей.
SELECT FOUND_ROWS()
вы найдете для этого SELECT FOUND_ROWS()
. См. Пример на сайте php.net http://www.php.net/manual/en/ref.pdo-mysql.php#77984
rowCount (), как известно, работает с mysql, поэтому, если переносимость не вызывает беспокойства, используйте это.
в противном случае вы можете попытаться изменить логику программы, например
$stmt->execute(); $count = 0; foreach($stmt as $record) { // output... $count++; } if(!$count) echo "no results!";