PHP报错Warning: Trying to access array offset on null的问题排查
问题分析与修复
报错原因
第15行的if($row['bangla_mean'] == $bangla_mean)存在两个核心问题:
- 空值访问风险:当数据库中不存在匹配
$bangla_mean的记录时,$result->fetch_array(MYSQLI_ASSOC)会返回null,此时直接访问$row['bangla_mean']就会触发「Trying to access array offset on value of type null」警告。 - 逻辑冗余:既然查询条件已经是
bangla_mean=?,如果查询到结果,$row['bangla_mean']必然等于$bangla_mean,无需再做等值判断。
修复方案
先判断查询是否返回有效结果,再执行后续逻辑,修改后的代码如下:
<?php include "config.php"; $bangla_mean = $_POST["bangla_mean"] ?? ''; $english_mean = $_POST["english_mean"] ?? ''; $example_mean = $_POST["example_mean"] ?? ''; $synonym_mean = $_POST["synonym_mean"] ?? ''; if(!empty($bangla_mean)){ $stmt = $conn->prepare("SELECT bangla_mean FROM wordmeanings_table WHERE bangla_mean=?"); $stmt->bind_param("s",$bangla_mean); $stmt->execute(); $result = $stmt->get_result(); // 直接通过结果行数判断是否存在重复记录 if($result->num_rows > 0){ $response = "This Bangla meaning already exist!"; } else{ $stmt = $conn->prepare("INSERT INTO wordmeanings_table (bangla_mean, english_mean, example_mean, synonym_mean) VALUES (?, ?, ?, ?)"); $stmt->bind_param("ssss",$bangla_mean,$english_mean,$example_mean,$synonym_mean); if($stmt->execute()){ $response = "Inserted the meaning data!"; } else{ $response = "Something went wrong!"; } } } else { $response = "Bangla meaning cannot be empty!"; } echo $response; exit; ?>
关键优化点
- 用
$result->num_rows > 0直接判断是否存在重复记录,彻底避免访问空数组的风险。 - 给
$_POST变量增加?? ''默认值,防止未传参时出现Undefined index警告。 - 把
isset($bangla_mean)改成!empty($bangla_mean),避免空字符串被误判为有效输入。
内容的提问来源于stack exchange,提问作者Najmul Hasan
相关产品推荐
相关产品推荐

