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

PHP报错Warning: Trying to access array offset on null的问题排查

问题分析与修复

报错原因

第15行的if($row['bangla_mean'] == $bangla_mean)存在两个核心问题:

  1. 空值访问风险:当数据库中不存在匹配$bangla_mean的记录时,$result->fetch_array(MYSQLI_ASSOC)会返回null,此时直接访问$row['bangla_mean']就会触发「Trying to access array offset on value of type null」警告。
  2. 逻辑冗余:既然查询条件已经是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:35:35