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

使用mysqli_data_seek及Do While循环复用结果集时首条记录出现空数组偏移访问警告的技术求助

问题分析与解决方案

我来帮你排查这个问题!出现这个警告的原因其实和do-while循环的执行逻辑以及$row3变量的状态有关:

错误原因拆解

  1. 第一个do-while循环结束时,mysqli_fetch_assoc($result3)会返回null(因为已经遍历完所有记录),此时$row3被赋值为null。
  2. 你调用mysqli_data_seek($result3, 0)重置了结果集指针,但**$row3的当前值还是null**。
  3. 第二个do-while循环是先执行循环体代码,再判断循环条件——也就是说,第一次进入循环体时,你直接去访问$row3['nama_p'],但此时$row3还是null,自然就触发了“访问null的数组偏移”警告。

解决方案

推荐两种处理方式,优先选第一种(更安全易维护):

方案1:提前将结果集转为数组(最优解)

直接把结果集的所有数据读取到一个数组中,之后复用这个数组生成下拉框,完全不用操作结果集指针,避免指针相关的坑:

// 在第一次使用结果集前,先把所有数据存入数组
$provinceList = [];
while ($row = mysqli_fetch_assoc($result3)) {
    $provinceList[] = $row;
}

然后用这个数组生成第一个下拉框:

<option value="">-</option> 
<?php foreach ($provinceList as $row3) {?> 
<option value="<?php echo $row3['nama_p'];?>" <?php if($row3['nama_p'] === $row2['prov_domisili']) echo 'selected="selected"'; ?>><?php echo $row3['nama_p'];?></option> 
<?php }?> 
</select></td>

第二个下拉框同样复用这个数组:

<select name="textfield14" id="textfield14"> 
<option value="">-</option> 
<?php foreach ($provinceList as $row3) {?> 
<option value="<?php echo $row3['nama_p'];?>" <?php if($row3['nama_p'] === $row2['prov_ktp']) echo 'selected="selected"'; ?>><?php echo $row3['nama_p'];?></option> 
<?php }?> 
</select>

这种方式的好处是代码更清晰,不用关心指针位置,而且如果结果集为空,也不会出现错误(只会显示默认的-选项)。

方案2:修正第二个do-while的执行逻辑

如果一定要复用原结果集指针,需要在第二个do-while循环前,先手动获取第一条记录,确保$row3不是null再进入循环:

<?php 
mysqli_data_seek($result3, 0);
// 先获取第一条记录,给$row3赋值
$row3 = mysqli_fetch_assoc($result3);
?>
<select name="textfield14" id="textfield14"> 
<option value="">-</option> 
<?php do {
    // 加个判断,避免结果集为空的情况
    if ($row3) {
?> 
<option value="<?php echo $row3['nama_p'];?>" <?php if($row3['nama_p'] === $row2['prov_ktp']) echo 'selected="selected"'; ?>><?php echo $row3['nama_p'];?></option> 
<?php 
    }
} while ($row3 = mysqli_fetch_assoc($result3));?> 
</select>

不过这种方式需要额外处理结果集为空的情况,不如方案1省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:07:35