首页 > 解决方案 > 由于未捕获的 TypeError,如何创建空数组:无法读取 null 的属性“长度”

问题描述

我正在使用数据表。对表格的调用是基于菜单的。SQL 语句可能没有获取任何记录,因此结果是空的。发生这种情况时,数据表会返回错误

未捕获的类型错误:无法读取 null 的属性“长度”

我该如何防止这种情况发生?我在互联网上找不到任何可行的示例或解决方案。

获取 json 数据的我的 SQL 代码:

    $stmt->execute();
    $result = $stmt->get_result(); //only works when nd_mysli is set on the server!

    while ($row = $result->fetch_assoc()) {
    $dataset = array(0); 

    $array[] = $row;
}

$dataset = array(
    
    "echo" => 1,
    "totalrecords" => count($array),
    "totaldisplayrecords" => count($array),
    "data" => $array,
);

echo json_encode($dataset);

标签: phparraysjson

解决方案


假设我们正在谈论,$array那么是的,你可以。有两种主要方法可以做到这一点:

声明变量

您可以在循环之前将变量声明while为空数组:$array = []

$array = [];

$stmt->execute();
$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
    $dataset = array(0); 
    $array[] = $row;
}

$dataset = array(
    "echo"                => 1,
    "totalrecords"        => count($array),
    "totaldisplayrecords" => count($array),
    "data"                => $array,
);

echo json_encode($dataset);

null聚结

在您的输出中,您可以使用合并运算符在不存在null的事件中设置默认值:$array$array ?? null

方法一

将对以下count功能产生警告:

$dataset = array(
    "echo"                => 1,
    "totalrecords"        => count($array),
    "totaldisplayrecords" => count($array),
    "data"                => $array ?? [],
);

方法二

这是应该这样做的方式:

$array   = $array ?? [];
$dataset = array(
    "echo"                => 1,
    "totalrecords"        => count($array),
    "totaldisplayrecords" => count($array),
    "data"                => $array,
);

推荐阅读