在空表上的PHP中的SQL查询返回什么?

时间:2011-06-13 02:20:31

标签: php mysql

我有以下PHP脚本:

 <?php
       $all_threads=mysql_query("SELECT * FROM forum_threads WHERE category=$_GET[id]");

       if($all_threads){ ?>
            //Do something.
     <?php
       }
       else { ?>
            //Do something else
      <?php
       } ?>

表forum_threads为空,因此查询应根据http://php.net/manual/en/function.mysql-query.php处的文档返回'false',并且'else'块应该执行。然而,奇怪的是,if-block正在执行。怎么样?

2 个答案:

答案 0 :(得分:5)

它将返回一个MySQL资源,而不是0行的FALSE。它会在查询错误时返回FALSE

您可以改为mysql_num_rows()。如果没有返回任何行,它将为0

您还有SQL注入漏洞。使用mysql_real_escape_string()转义GET参数。

如果可以,请放弃mysql_*()并使用PDO

答案 1 :(得分:2)

它不会返回false,因为SQL语句中没有错误,它只返回一个空结果集,因为没有匹配的记录。