You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP报错:trying to access array offset on value of type null 求助

嘿,我帮你揪出这个错误的根源啦!你遇到的 trying to access array offset on value of type null 问题,其实是结果集被提前耗尽导致的,跟你同时操作两张表无关,是代码执行顺序的问题~

问题本质

你看哦,你先调用了 mysqli_fetch_all($result, MYSQLI_ASSOC),这个函数会一次性把结果集里的所有数据都读取到数组里,读完之后,$result 这个结果集的指针就跑到末尾了,再也没有数据能读了。之后你又调用 mysqli_fetch_assoc($result),这时候函数只能返回 null——同理 $result2 也是一样的情况。当你试图访问 $shelfitem['parent_id'] 和 $shelfwebsite['folder'] 时,本质是在访问 null 的数组偏移,自然就抛出错误了。

两种修复方案

根据你的需求,给你两种可行的修复方式:

方案一:直接从全量数组取第一行(推荐)

如果你本来就想拿两张表的第一行数据存会话,那直接从已经获取的全量数组里取第一个元素就行,不用再调用 mysqli_fetch_assoc:

<?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); 

// 先判断数组是否为空,再取第一行,避免空数组报错
$shelfitem = !empty($shelfitems) ? $shelfitems[0] : [];
$shelfwebsite = !empty($shelfwebsites) ? $shelfwebsites[0] : [];

// 用空合并运算符处理可能的空值,避免存入null后后续报错
$_SESSION['parent_id'] = $shelfitem['parent_id'] ?? null; 
$_SESSION['folder'] = $shelfwebsite['folder'] ?? null; 

$parent_id = $_SESSION['parent_id']; 
$folder = $_SESSION['folder']; 

mysqli_close($conn); 

方案二:先取单条数据,再拿全量数据

如果你既需要单条数据存会话,又需要保留全量数据数组,那就要调换顺序——先调用 mysqli_fetch_assoc 拿第一行,再调用 mysqli_fetch_all 拿剩下的所有数据:

<?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); 

// 先取第一行数据
$shelfitem = mysqli_fetch_assoc($result);
$shelfwebsite = mysqli_fetch_assoc($result2);

// 再读取结果集中剩下的所有数据
$shelfitems = mysqli_fetch_all($result, MYSQLI_ASSOC); 
$shelfwebsites = mysqli_fetch_all($result2, MYSQLI_ASSOC); 

// 同样做空值处理
$_SESSION['parent_id'] = $shelfitem['parent_id'] ?? null; 
$_SESSION['folder'] = $shelfwebsite['folder'] ?? null; 

$parent_id = $_SESSION['parent_id']; 
$folder = $_SESSION['folder']; 

mysqli_close($conn); 

额外提醒

以后写数据库操作的时候,记得永远做空值判断!比如用 ?? 空合并运算符,或者提前判断数组是否为空,不然遇到表中没有数据的情况,还是会触发类似的错误哦~

内容的提问来源于stack exchange,提问作者elliec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:48:09