如果isset在数据库提取时无法正常工作

时间:2015-03-24 17:01:37

标签: php html mysql isset

所以我使用此查询从我的数据库中获取一些信息。

$fetch_menu = $db->prepare("SELECT id, title, link, custom_link, rel FROM header_menu ORDER BY id DESC");
$fetch_menu->execute();

$header_menu = $fetch_menu->fetchAll();
$header_count = $fetch_menu->rowCount();

现在我正在尝试使用此语句来回显数据库中的数据。

$nav_count = 0;
while ($header_count > $nav_count){
    echo "<li><a ";

    if (isset($header_menu[$nav_count]['rel'])){
        echo "rel='";
        echo $header_menu[$nav_count]['rel'];
        echo "'";
    }
    $nav_count ++;
}

现在,问题出现在我的网站上,我得到了这个输出(来自WITHOUT rel filled或custom_url填充的字段):

<a rel="" href="">Contact</a>

rel 的列在我的数据库中为空,但它仍然响应。 我对此语句有完全相同的问题,其中custom_link字段填充在1个菜单项中,而不是其余的。

if (isset($header_menu[$nav_count]['custom_link'])){
    echo " href='";
    echo $header_menu[$nav_count]['custom_link'];
}
else if (isset($header_menu[$nav_count]['link'])){
    echo " href='/";
    echo $header_menu[$nav_count]['link'];
}

填充custom_url的字段的输出是:

<a rel="" href="http://example.com">Test page</a>

为什么我的数据库提取无法使用isset?

2 个答案:

答案 0 :(得分:2)

你可以使用var_dump($header_menu); 看看变量中的内容。

也使用empty()而不是isset()

答案 1 :(得分:0)

如果您使用mysqli,当您使用标记指示它时,fetchAll的工作方式与mysqli_fetch_row类似,并且它将变量设置为查询返回的相应值,但是将“NULL”字段设置为PHP空值&#39;。所以(正如其他人在评论中指出的那样)变量总是被设置,但请注意它的值可以是NULL。

isset确定变量是否已设置且不是NULL&#39;。实际上,您可以使用isset来确定查询是否为字段返回NULL。但这不是你的情况,你有一个空字符串,你可以用empty来检查。请注意,您不需要将空组合与isset结合使用:如果变量不存在或者其值等于FALSE,则该变量被视为空。如果变量不存在,empty()不会生成警告。&#39;

在你的情况下:

isset($header_menu[$nav_count]['rel']) // true, unless rel is NULL in the database
$header_menu[$nav_count]['rel'] == "" // true if rel is an empty string ("") in the database, false otherwise
empty($header_menu[$nav_count]['rel']) // true if rel is an empty string, "0" (as a string), 0, 0.0, FALSE or NULL in the database, false otherwise