【问题标题】:if isset not working properly with database fetch如果 isset 无法与数据库提取一起正常工作
【发布时间】:2015-03-25 01:42:06
【问题描述】:

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

$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 ++;
}

现在,问题出现在我获得此输出的网站上(来自未填充 rel 或 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?

【问题讨论】:

  • 变量总是设置的,它只是空的。请改用!empty()。
  • if (isset($header_menu[$nav_count]['rel']) && !empty($header_menu[$nav_count]['rel'])){

标签: php html mysql isset


【解决方案1】:

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

也使用 empty() 代替 isset()

【讨论】:

  • Okai,现在工作,使用 !empty() 而不是 isset()。谢谢!请问是什么让isset() 不起作用?
  • isset 将在 isset('') isset(0) 之类的东西上返回 true,而 empty 将返回 false。他们在问不同的事情。变量是否设置为某个值?是的。变量是否为空?是的。
  • isset() 基本上是在问“这东西真的存在吗?”而 empty() 询问“这个东西是否有除零 (0)、FALSE、空字符串、NULL 等以外的值”。例如: $a = array("key"=>NULL); isset($a["key"] === TRUE 而 isset($a["bogus"]) === FALSE -and- empty($a["key"]) === TRUE but empty($a ["bogus']) 非法警告
【解决方案2】:

如果您使用 mysqli,正如您在标签中指出的那样,fetchAll 的工作方式类似于 mysqli_fetch_row,它将变量设置为查询返回的相应值,但“将 NULL 字段设置为 PHP NULL 值”。所以(正如其他人在他们的 cmets 中指出的那样)变量总是被设置,但请注意它的值可以是 NULL。

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

在你的情况下:

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

【讨论】:

  • 我正在使用PDO,但是如何用标签表明我正在使用mysqli?
  • 我认为它只是基于 mysql 标签
猜你喜欢
  • 1970-01-01
  • 2013-06-22
  • 2016-07-27
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
相关资源
最近更新 更多