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
相关产品推荐
相关产品推荐

