PHP代码跳过if并直接进入else语句

时间:2012-01-27 08:22:42

标签: php mysql debugging if-statement

出于某种原因,它不会进入我的if语句......

这可能是显而易见的事情,但已经很晚了,我已经被困在这里半小时了......

<?php
            $id = $_GET['id'];
            if ($id == "") {
                //it goes here correctly
            } else {
                $result = mysql_query("SELECT * FROM posts WHERE id= $id");
                if ($result == "0") {
                    //It does not go here.
                } else {
                   //It goes here correctly
                    }
                }
            }
            ?>

非常感谢... - Luca

3 个答案:

答案 0 :(得分:3)

我不知道您为什么希望0作为mysql_query的返回值。

From the manual(强调我的):

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回   结果集,mysql_query()在成功时返回资源,或者返回FALSE   错误

     

[...]

     

使用mysql_num_rows()来查找为a返回的行数   SELECT语句或mysql_affected_rows()来查找多少行   受到DELETE,INSERT,REPLACE或UPDATE语句的影响。

     

mysql_query()也会失败,如果用户没有,则返回FALSE   有权访问查询引用的表。

所以,通过猜测,你真正想要的代码是:

$id = $_GET['id'];
if ($id == "") {
    //it goes here correctly
} else {
    $result = mysql_query("SELECT * FROM posts WHERE id= $id");
    if ($result === false || mysql_num_rows($result) === 0) {
        //It always goes to else statement.
    } else {
       //It goes here correctly
    }
}

答案 1 :(得分:1)

如果您的查询没问题,那么mysql_query()会返回资源,$result == "0"始终为false

答案 2 :(得分:0)

即使您没有该ID的任何数据,它也会返回“true”,因为您的查询已成功执行。 相反,你可以尝试这样:

$result = mysql_query("SELECT * FROM posts WHERE id= $id");
 $rows=mysql_num_rows($result);
 if($rows>0){
  //you have data to work with 
 }
 else{
  //no data 
 }