如果没有行返回那么当使用php与mysql时它是假的

时间:2010-08-21 05:55:44

标签: php mysql comparison conditional-statements

我注意到很多教程说明通常都有这段代码:

$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 个答案:

答案 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