Чем полезна проверка num_rows перед циклом while после запроса SELECT? - PullRequest
2 голосов
/ 05 марта 2012

Во многих сценариях программисты проверяют, возвращал ли запрос SELECT какую-либо запись, прежде чем запускать соответствующий цикл while как

$result=mysql_query("SELECT * From table WHERE column='XX'");
if(mysql_num_rows($result)>0) {
    while($row=mysql_fetch_array($result)){
    ...
    }
}

. Эта проверка необходима или полезна вообще?потому что, когда не возвращаются никакие записи, цикл while не будет циклически повторяться.Может ли проверка количества возвращаемых строк улучшить производительность?

Ответы [ 2 ]

5 голосов
/ 05 марта 2012

Вы обычно делаете это для случая, когда строки не возвращены, и вы просто хотите распечатать приятное сообщение для пользователя. если у вас есть только цикл while, вам нужно сохранить счетчик, и это может стать уродливым.

так что это в основном для

else {
  echo "No results found!";
}

;)

1 голос
/ 05 марта 2012

Для программиста очевидно, что код в цикле WHILE не будет выполнен, если не будет возвращено ни одной строки.Это обычная конструкция, поэтому никаких дополнительных пояснений не требуется.Поэтому, если нет ветки, IF не требуется.

  1. Согласно гибким принципам, мы не должны вставлять код только потому, что он может понадобиться нам позже.
  2. Мы должны упростить код всякий раз, когда это возможно.

Итак, учитывая две причины не вставлять избыточный код, я не могу думать о какой-либо причине, чтобы поместить его туда.

ХОРОШО:

$result=mysql_query("SELECT * From table WHERE column='XX'");
if(mysql_num_rows($result)>0) {
    while($row=mysql_fetch_array($result)){
      ...
    }
} else {
  // Do something
}

ХОРОШО:

$result=mysql_query("SELECT * From table WHERE column='XX'");
while($row=mysql_fetch_array($result)){
    ...
}

ПЛОХО:

$result=mysql_query("SELECT * From table WHERE column='XX'");
if(mysql_num_rows($result)>0) {
    while($row=mysql_fetch_array($result)){
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...