【问题标题】:Passing values from MySql to PHP. How to avoid NULL value将值从 MySql 传递到 PHP。如何避免 NULL 值
【发布时间】:2018-11-16 09:26:03
【问题描述】:

我想通过使用 MySql 值在 PHP 中动态填充网站菜单。

MySql 表由两个字段组成:
第一个称为“类别”,另一个称为“父级”。

但我还需要指定一些“子类别”,例如:

类别:男士、女士、男孩、女孩
子类别:衬衫、裤子、鞋子、配饰

所以我想通过在表中实现一个“父”字段来解决问题,以便:

如果 parent=0,则表示它是一个主要类别(MEN、WOMEN、BOYS、GIRLS)

如果 parent=1,则表示它是一个子类别,因此它是 MEN'S SHIRT
如果 parent=1,则表示它是一个子类别,因此它是 MEN'S PANTS
如果 parent=1,则表示它是一个子类别,因此它是 MEN'S SHOES
如果 parent=1,则表示它是一个子类别,因此它是 MEN'S SHIRT

如果 parent=2,则表示它是一个子类别,因此它是 WOMEN'S SHIRT
如果 parent=2,则表示它是一个子类别,因此它是 WOMEN'S PANTS
如果 parent=2,则表示它是一个子类别,因此它是 WOMEN'S SHOES
如果 parent=2,则表示它是一个子类别,因此它是 WOMEN'S SHIRT

...等...

(也许有更有效的方法,但我就是这么想的)

现在,如果我这样设置我的 PHP 代码:

$parent_arr_id = $parent_arr['id'];
$sql = "SELECT * FROM categories WHERE parent ='parent_arr_id'";
$query_child = $db->query($sql);
while($child = mysqli_fetch_assoc($query_child)) :
echo $child['category'];
endwhile;

在我的 MySql DB 中有 parent=1,我应该得到什么?
正确的输出应该是:
衬衫、裤子、鞋子、配饰

我得到的是:
男人,女人,男孩,女孩

我对表中的默认值进行了三次检查,一切都正确,我可以保证 100%。
我直接在 MySql 中手动进行查询,它可以工作。

所以我仔细检查了第一行,像这样回显它的变量:

$parent_arr_id = $parent_arr['id'];
var_dump($parent_arr_id);

但我得到一个 NULL 值!
我想这就是为什么我要
男士、女士、男孩、女孩 安装
衬衫、裤子、鞋子、配饰
也许它们是默认值 (?)。

网上查了一下好像是这样的,因为它是一个关联对象数组,应该转换成字符串数组。我试过了:

var_dump ($child['category']);

但没什么变化:NULL

谁能帮帮我?
我不知道如何解决这样的困境! :)
非常感谢您!

【问题讨论】:

  • SELECT * FROM categories WHERE parent = 1 ?
  • $sql = "SELECT * FROM categories WHERE parent ='parent_arr_id'"; 首先,如果$parent_arr_id 是一个整数,请删除',因为它们仅适用于字符串。其次,您在$parent_arr_id 中缺少$查询... 第三,此查询容易受到注入攻击,我建议您使用mysqli prepared queries
  • 感谢@IsThisJavascript 的回答。我应用了您建议的更正。我收到以下错误:警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,给定布尔值
  • @PaulSpiegel 我想动态填充菜单。我不想静态传递值。谢谢。
  • 当然你会得到那个错误。不要将代码放入 cmets,编辑您的问题并将代码放在那里。关键是在到达 mysqi_fetch_assoc 之前找出 var 包含的内容,以便找出 sql 失败的原因。

标签: php mysql null associative-array


【解决方案1】:

问题解决了。只是因为我没有将 $ 符号放在变量名 ($parent_arr_id) 之前。应该是:

$sql = "SELECT * FROM categories WHERE parent =$parent_arr_id";

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 1970-01-01
    • 2017-01-09
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    相关资源
    最近更新 更多