bool(false)并且仍然为null

时间:2013-10-22 12:36:49

标签: php null boolean

我正在使用此方法获取医生名单:

public static function getFiltered($specialist = null, $standby = null, $payedThisYear = null, $payedLastYear = null) 
{
    $mysqli = connectdbMySQLI();
    $query = "SELECT * FROM tblMember WHERE 1 = 1";

    if($specialist != null)
    {
        if ($specialist == true) 
            $query .= " AND specialist = true";
        else
            $query .= " AND specialist = false";
    }
}

使用不同的复选框设置参数(true / false)。 我在Firebug中用var_dump检查了$ specialist-value。当$ specialist为true时,查询工作正常。如果它是假的,它甚至不会输入if语句,因此它显然会突然变为空。

然后我用带有else语句的if语句中的echo来检查它,我得到了相同的结果......当$ specialist = false时,它直接进入'else-statement'......

有什么不对?

3 个答案:

答案 0 :(得分:6)

在PHP中,表达式(FALSE != NULL)始终为FALSE,因此if块中的代码将永远不会被执行。

这可以使用var_dump()来演示。请考虑以下表达式:

$specialist = false;
var_dump($specialist != null);
var_dump($specialist !== null);

output将是:

bool(false) 
bool(true)

使用strict comparison解决此问题:

if($specialist !== null)
{
    if ($specialist == true) 
        $query .= " AND specialist = true";
    else
        $query .= " AND specialist = false";
}

您也可以使用is_null()功能。

答案 1 :(得分:1)

尝试

if ($specialist) 
    $query .= " AND specialist = true";
else
    $query .= " AND specialist = false";  

或直接尝试

$query .= " AND specialist = $specialist";    

答案 2 :(得分:1)

简单: 取消选中复选框时,在提交表单时,该字段不包含在POST或GET请求中,因此它为空。

从superglobal获取该值时,应使用isset()检查复选框状态,以查看是否标记了它。 如果您还需要“不关心”值,请考虑使用3个无线电输入更改复选框。复选框只有2种状态。