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

PHP运行报Trying to access array offset on type bool警告如何解决?

报错原因

该警告触发的根本原因是第87行执行$data[0]时,$data的类型为布尔值而非数组,PHP不支持对布尔值使用数组下标访问。
通常你的Database类的read方法会在两种场景返回布尔值false:

  • 传入的$id对应的分类不存在,数据库无匹配查询结果
  • SQL执行异常(如数据库连接中断、categories表不存在、字段名拼写错误等)
排查步骤
  • 临时加调试代码确认$data返回值:在$data = $DB->read(...)行后添加var_dump($id, $data);exit;,运行后查看传入的$id是否为有效值,以及$data的实际返回内容
  • 验证SQL合法性:将调试得到的SQL语句复制到数据库管理工具中直接执行,确认是否能正常返回结果,排查SQL语法错误、表/字段不存在的问题
  • 确认read方法的返回规则:查看Database类中read方法的实现,确认是否存在查询无结果时返回false而非空数组的逻辑
修复方案

先对$data的类型和非空状态做判断,再返回对应结果,修复后的代码如下:

<?php
public function get_one($id){
    $id = (int)$id;
    // 提前过滤非法ID
    if ($id <= 0) {
        return null;
    }

    $DB = Database::newInstance();
    $data = $DB->read("select * from categories where id = '$id' limit 1");

    // 只有$data是有效非空数组时才取第一个元素
    return is_array($data) && isset($data[0]) ? $data[0] : null;
}
?>

如果你的业务逻辑允许无匹配ID时返回空数组/空对象,也可以根据实际需求调整判断后的返回值。

额外优化建议

你当前的SQL写法直接拼接$id参数存在SQL注入风险,即使已经做了int强转,更推荐修改为参数绑定的写法,适配你的Database类的参数绑定规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:00:02