PHP报illegal offset type错误VSCode无提示的修复方法
错误原因
PHP抛出illegal offset type错误的核心规则是:PHP数组的键仅支持整数、字符串两种合法类型,传入数组、对象等类型作为键时就会触发该错误。
你代码中触发报错的原因是:mysqli_fetch_all(MYSQLI_ASSOC)返回的$option是单条数据库记录对应的关联数组,你直接把整个数组当作$series的键使用,类型不符合要求。
其他存在的代码问题
除了触发报错的数组键类型问题,你的代码还有几个会导致功能异常的问题:
<option>标签中写的<?php $ID ?>没有输出逻辑,ID值不会渲染到HTML上- select的选项值应该放在
value属性中,而不是name属性 - 当数据库查询无结果时,
$options变量没有初始化,直接遍历会抛出未定义变量警告 - select闭合标签前多了一个多余的
>字符,属于HTML语法错误
修正后的完整代码
<?php $query = "SELECT * FROM matriculas"; $result = $con->query($query); // 先初始化空数组,避免无查询结果时遍历报错 $options = []; if($result->num_rows > 0){ $options = mysqli_fetch_all($result, MYSQLI_ASSOC); } $series = []; foreach ($options as $option) { // 数组键使用记录的唯一主键(如果你的表主键字段不是id,替换为实际字段名即可,只要是整数/字符串类型、值唯一就可以) $series[$option['id']] = [$option['matricula'], $option['type']]; } ?> <select name="id"> <option>Select matricula</option> <?php foreach ($series as $ID => $values) { ?> <option value="<?php echo $ID; ?>"><?php echo $values[0]; ?></option> <?php } ?> </select>
补充说明
VSCode没有提前提示这个错误属于正常情况:默认的PHP静态语法检测不会覆盖运行时的变量类型校验,这类类型不匹配的问题只有代码实际执行时才会抛出。
内容的提问来源于stack exchange,提问作者optimus899
相关产品推荐
相关产品推荐

