首页 > 解决方案 > 错误 - '试图访问 null 类型值的数组偏移量'

问题描述

我不断收到错误消息:在定义我的会话变量的行中,“尝试访问类型为 null 的值的数组偏移量”。我环顾了网络/堆栈和我的代码,但我不知道出了什么问题!这是我第一次从一个文档/代码页中的两个不同表中定义会话变量,所以我怀疑这与此有关。以下是发生错误的 PHP 代码:

<?php

    session_start();

    include('../includes/dbh.inc.php');


    $sql = 'SELECT * FROM shelfitems';
    $lqs = 'SELECT * FROM shelfwebsites';

    $result = mysqli_query($conn, $sql);
    $result2 = mysqli_query($conn, $lqs);

    $shelfitems = mysqli_fetch_all($result, MYSQLI_ASSOC);
    $shelfwebsites = mysqli_fetch_all($result2, MYSQLI_ASSOC);
    $shelfwebsite = mysqli_fetch_assoc($result2);
    $shelfitem = mysqli_fetch_assoc($result);

    $_SESSION['parent_id'] = $shelfitem['parent_id'];
    $_SESSION['folder'] = $shelfwebsite['folder'];
    $parent_id = $_SESSION['parent_id'];
    $folder = $_SESSION['folder'];
    mysqli_close($conn);

标签: phpmysqli

解决方案


问题是 mysqli_fetch_assoc 返回 NULL。所以你的变量 $shelfitem 和 $shelfwebsite 是空值

为避免此错误,您可以在获取之前检查是否有任何结果

if (mysqli_num_rows($result) > 0) {
    $shelfitem = mysqli_fetch_assoc($result);

    $_SESSION['parent_id'] = $shelfitem['parent_id'];
}

https://www.php.net/manual/en/mysqli-result.fetch-assoc.php https://www.php.net/manual/en/mysqli-result.num-rows.php

UPD

结果可能为空的原因

  1. 你的 sql 查询没有找到任何东西。检查您的表格是否已填满
  2. 您之前已经使用 mysqli_fetch_all 阅读过 $result

我目前无法检查第二个原因,但您可以尝试评论字符串并检查它是否有效

$shelfitems = mysqli_fetch_all($result, MYSQLI_ASSOC);
$shelfwebsites = mysqli_fetch_all($result2, MYSQLI_ASSOC);

推荐阅读