Можно ли проверить, имеет ли pdostatement :: fetch () результаты без перебора строки? - PullRequest
4 голосов
/ 13 октября 2009

У меня есть страница, на которой нужно проверить результаты, и способ, которым я пришел к этому, успешен, но перебирает первый ряд результатов. Есть ли способ проверить без повторения или вернуться к первой строке без повторного выполнения запроса?

Я делал это:

 $q = pdo::prepare($SQL);
 $q->execute(array(':foo'=> foo, 'bar'=>bar);
 if(!q->fetch){
     //no results;
 }else{
      //results;
 };

Он делает почти то же, что я и надеялся, с неудачным побочным эффектом пропуска первого ряда результатов.

Я прибег к выполнению $ q-> execute () во второй раз. Есть ли способ избежать этого?

Ответы [ 4 ]

4 голосов
/ 13 октября 2009

Просто поместите результат выборки в переменную:

if($row = $q->fetch()) {
    // $row contains first fetched row
    echo $row['coloumn_name'];
}
else
    // no results
2 голосов
/ 13 октября 2009

Если вы хотите быть ленивым, вы всегда можете сделать что-то вроде:

$totalRows = count($resultSet->fetchAll());

Однако для больших наборов результатов это менее чем эффективно.

В противном случае обратитесь к руководству на странице о rowCount () (в частности, пример № 2), чтобы узнать, как выглядит стандартный обходной путь. На этой странице также есть несколько интересных пользовательских комментариев.

0 голосов
/ 13 октября 2009

rowCount (), как известно, работает с mysql, поэтому, если переносимость не имеет значения, используйте это.

в противном случае вы можете попытаться изменить логику программы, например,

    $stmt->execute();

    $count = 0;
    foreach($stmt as $record) {
        // output...
        $count++;
    }

    if(!$count)
        echo "no results!";
0 голосов
/ 13 октября 2009

Может быть, вы найдете SELECT FOUND_ROWS() полезным для этого. Смотрите пример на сайте php.net http://www.php.net/manual/en/ref.pdo-mysql.php#77984

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...