所以我使用此查询从我的数据库中获取一些信息。
$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?
答案 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