mysqli_fetch_assoc - 在空表上选择会带来空结果,而不是没有结果

时间:2013-09-20 16:16:54

标签: php mysqli

表存在,但它是空的。

表中没有数据,我等待它不回显任何内容并读取if ($notable1 == 'on'),但它回显.$from_month.和分隔符"| "

(当表不存在时,代码正常。)

问题出在哪里?我找不到。

foreach ($datesBooked_1_month as $value)
{                       
    if ($result = mysqli_query($bdd, "SELECT * FROM `".$tab_from_month_year."` WHERE day = ".$value." ")) 
    {                   

        $data = (mysqli_fetch_assoc($result)); 

        echo $data['day'].'/'`.$from_month.`"| ";
        if ($data['roomtype_1'] <= 3) { echo $data['roomtype_1']."| " ;}   else {echo "X| "; }
        if ($data['roomtype_2'] <= 3) { echo $data['roomtype_2']."| " ;}   else {echo "X| "; }
        if ($data['roomtype_3'] <= 3) { echo $data['roomtype_3']."| " ;}   else {echo "X| "; }
        if ($data['roomtype_4'] <= 3) { echo $data['roomtype_4']."| " ;}   else {echo "X| "; }
        if ($data['roomtype_5'] <= 3) { echo $data['roomtype_5']."| " ;}   else {echo "X| "; }
        if ($data['roomtype_6'] <= 3) { echo $data['roomtype_6']."<br/>";} else{echo"X<br/>";}                                                              

    }
    else if (!$result){ $notable1 = 'on'; }         

}
if ($notable1 == 'on')
    {                   
        foreach ($datesBooked_1_month as $value) 
        {                       
        echo $value. "- Free #<br />";                  
        }
    }   

2 个答案:

答案 0 :(得分:1)

空结果仍然是有效结果。在做回声之前,你必须明确地测试数据是否存在,例如

$result = mysqli_query(...) or die(mysqli_error());
if (mysqli_num_rows($result) > 0) {
    $data = mysql_fetch_assoc($result);
    ... echoes go here ...
}

请注意mysqli_num_rows()

的使用

您的测试完全无效。 $result只会FALSE fs查询本身失败(语法错误,数据库无法访问等等)。导致没有数据的查询仍然是一个有效的查询结果,并且会有一个正确的结果句柄......恰好代表一个空集。

答案 1 :(得分:1)

我认为您不应该检查查询(!$result)的执行情况,因为查询实际上已执行,因此$result不会出现错误,因为在情况表不存在的情况下会发生。

您应该只检查返回的行mysqli_num_rows == 0,这意味着没有返回行