我注意到很多教程说明通常都有这段代码:
$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等于假吗?我已经使用过这种方法,并注意到没有什么不同或不寻常。
答案 0 :(得分:3)
教程可能会尝试使代码尽可能清晰,直观和明确。使用名称明确暗示整数的mysql_num_rows
作为 boolean ,有点违反直觉。与零的比较是隐含的。相比之下,如果它被认为是数字,那么检查它是否大于零是直观和明显的,因此不那么混乱。
答案 1 :(得分:2)
为什么要将返回的行数分配给bool
名称为itExists
的变量?通过这样做,您可以制作以后可能无用的信息。最好将行数(mysql_num_rows())分配给一个变量,该变量表示它包含多行(numRows
或本例num
)。
将itExists
分配给4,5或6是不好的做法。通过这种方式,第一种方法更好。
$pages = $numRows / $itemsPerPage;
//works better than...
$pages = $itExists / $itemsPerPage;
答案 2 :(得分:1)
两种方式都很好用。我不知道你为什么不选择第二种方法。
答案 3 :(得分:0)
根据http://php.net/manual/en/function.mysql-num-rows.php,它在错误时返回FALSE。我很确定FALSE > 0
是假的,所以两者是等价的。
OTOH,它在其他语言(以及可能在旧版本的PHP)中的传统方法是在错误上返回负数。一些OpenSSL signature-verification functions返回1表示“有效”,0表示“无效”,-1表示“错误”。这是一种编码风格的东西。
答案 4 :(得分:0)
PD。如果你只需要检查是否有行,使用mysql_num_rows效率不高,最好在SQL语句中计算:
SELECT COUNT(*) FROM table
请参阅: - MySQL PHP count(*) returning something weird - 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