2011-06-13 44 views
1

我有以下的PHP脚本:在空表上的php中的sql查询返回什么?

<?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文档和“其他”块都应该得到执行返回“假”。然而,奇怪的是,if块被执行。怎么来的?

回答

5

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

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

您还有一个SQL注入漏洞。用mysql_real_escape_string()逃避GET参数。

如果可以,只沟mysql_*()并使用PDO

+0

谢谢!很好的回复! – aakashbhowmick 2011-06-13 02:27:26

+0

'mysqli_'是另一个从'mysql_'升级到的选项 – 2011-06-13 02:31:30

2

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