检查数据库记录的NULL - > isset与is_null

时间:2013-12-03 01:12:37

标签: php mysql

我提供了代码,其中第一个参数是图像路径或MySQL数据库中的默认NULL,

function formatImage($img = NULL, $alt = NULL)
    {
        // if(isset($img)) DOESN'T WORK
        if(!$img == NULL)
        {
            return '<img src="' . $img . '" alt="' . $alt .'" />';
        }
        else
        {
            return NULL;
        }
    }

为什么isset不起作用?相反,我必须检查是否(!$ img == NULL)。

如果使用isset检查参数,并且$ img在数据库中为NULL。作为输出我得到整个HTML IMG标记与空src attibutes,和alt属性是从数据库获取的actaully标题。 将display属性设置为none,不能接受没有src属性的图像。

2 个答案:

答案 0 :(得分:2)

试试这个:

if($img != NULL) {
    return '<img src="' . $img . '" alt="' . $alt .'" />';
}

<强>解释

如果你将!$imgNULL进行比较,你基本上会在$img上做一个布尔反转,然后看看它是否与NULL相比 - 这不是你想要的。

另外,请注意您应该使用

if($img !== NULL)

代替。 !=将比较提供的变量的值,而!==将比较值和数据类型(在NULL情况下可能是您的最佳利益)。

答案 1 :(得分:0)

用var_dump检查变量后,从数据库返回的数据实际上是空字符串,

string(0) "" and not `NULL` datatype and value literally.

这就是isset()在两种情况下都保持返回TRUE的原因。使用值检查工作正常,因为返回的值是空字符串而不是NULL数据对象,我的意思是类型。

php.net获取ISSET语言构造的返回值:

如果var存在并且其值不是NULL,则返回TRUE,否则返回FALSE。

如果!==为真,则检查返回的变量值和数据类型是否为NULL,因为数据类型为非NULL,因为值为IS NULL。

似乎问题实际上是我在数据库字段中预期NULL表现为NULL数据类型。

如果我错了,请纠正我。

+1 @SquareCat