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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:55:31