PHP自定义自增ID报错:Trying to access array offset on value of type null
解决自定义自增ID生成的报错问题
报错原因
当penilaian表为空时,mysqli_fetch_array($result)会返回null,此时直接访问$row['idpenilaian']就会触发「Trying to access array offset on value of type null」警告,和主键非空设置无关,是空表场景下的逻辑处理缺失导致的。
修改后的代码
<?php // 查询最新的记录(仅获取需要的idpenilaian字段) $query = "select idpenilaian from penilaian order by idpenilaian desc limit 1"; $result = mysqli_query($sambungan, $query); // 先检查查询是否成功,再判断是否有返回数据 if ($result && mysqli_num_rows($result) > 0) { $row = mysqli_fetch_array($result); $lastid = $row['idpenilaian']; // 提取数字部分并递增 $num_part = intval(substr($lastid, 1)); $idpenilaian = "N" . ($num_part + 1); } else { // 表为空时初始化第一个ID $idpenilaian = "N10"; } ?>
关键改进点
- 仅查询
idpenilaian字段,减少不必要的数据传输 - 通过
mysqli_num_rows($result)判断是否有数据返回,避免访问null数组 - 简化逻辑,直接用空表分支处理初始ID,去掉冗余的空字符串判断
- 增加查询有效性判断,避免数据库连接或SQL错误引发的异常
额外优化建议
如果系统存在多用户并发插入的场景,上述代码可能生成重复ID,建议:
- 使用数据库自增整数主键,插入数据后再拼接前缀生成显示用ID
- 或者在生成ID时添加数据库事务,确保查询与插入操作的原子性
内容的提问来源于stack exchange,提问作者Ruhan Sri Rama
相关产品推荐
相关产品推荐

