если нет возврата строки, то это ложно при использовании php с mysql - PullRequest
2 голосов
/ 21 августа 2010

Я заметил, что многие учебные инструкции часто имеют такой код:

$sql="SELECT * from table";
$num=mysql_num_rows();

if ($num > 0)
{
do something
}

Почему они должны использовать это условие "if ($ num> 0)", когда я пишу этот код, который я считаю компактным и читаемым:

$sql="SELECT * from table";
$itExists=mysql_num_rows();

if ($itExists)
{
do something
}

mysql_num_rows когда-нибудь возвращает отрицательное целое число? Разве PHP не всегда равняется 0 ложному? Я использовал этот подход и не заметил ничего особенного или необычного.

Ответы [ 5 ]

3 голосов
/ 21 августа 2010

В руководствах, вероятно, делается попытка сделать код максимально понятным, интуитивно понятным и понятным.Использование mysql_num_rows, чье имя явно подразумевает целое число, как логическое , несколько нелогично.Сравнение с нулем неявно.Напротив, если оно воспринимается как число , то проверка того, что оно больше нуля, интуитивно понятна и очевидна и поэтому менее запутана.

2 голосов
/ 21 августа 2010

Зачем вам присваивать количество строк, возвращаемых переменной с именем bool, например itExists? Делая это, вы делаете информацию, которая может быть использована позже, менее полезной. Лучше назначить количество строк (mysql_num_rows ()) переменной, которая говорит, что она содержит количество строк (numRows или в этом случае num).

Назначить что-то вроде itExists для 4, 5 или 6 - не очень хорошая практика. Таким образом, первый способ лучше.

$pages = $numRows / $itemsPerPage;
//works better than...
$pages = $itExists / $itemsPerPage;
1 голос
/ 21 августа 2010

Оба способа работают просто отлично.Я не знаю, почему вы не выбрали бы второй метод.

0 голосов
/ 21 августа 2010

PD.Если вам нужно только проверить, есть ли строки, использование mysql_num_rows не очень эффективно, лучше посчитать в операторе SQL:

SELECT COUNT(*) FROM table

См .: - MySQL PHP count (*), возвращаячто-то странное - https://stackoverflow.com/search?q=php+mysql+count+rows


Разве PHP не всегда приравнивает 0 к ложному?

Не всегда:

$a = 0;
if (!$a) echo 'pass <br />'; else echo 'fails <br />';
if ($a == false) echo 'pass <br />'; else echo 'fails <br />';
if ($a === false) echo 'pass <br />'; else echo 'fails <br />';

См .: http://php.net/manual/en/language.operators.comparison.php

0 голосов
/ 21 августа 2010

Согласно http://php.net/manual/en/function.mysql-num-rows.php, возвращает FALSE при ошибке. Я почти уверен, что FALSE > 0 - ЛОЖЬ, поэтому оба эквивалентны.

OTOH, в других языках (и, возможно, в более старых версиях PHP) принято возвращать отрицательные числа при ошибке. Некоторые функции проверки подписи OpenSSL возвращают 1 для "допустимого", 0 для "недействительного" и -1 для "ошибки". Это стиль кодирования.

...