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

PHP与SQL求助:明明索引存在却报Undefined index错误

解决Undefined index: Id_sessione和Cod_sessione的问题

嘿,我一眼就揪出问题所在了!你碰到的这两个Notice: Undefined index错误,核心原因是SQL聚合查询的结果列名和你预期的完全不一致。

错误根源拆解

当你执行SELECT MAX(Id_sessione) from sessione这类聚合查询时,MySQL不会保留原列名Id_sessione,而是默认把结果列命名为MAX(Id_sessione)。同理,SELECT MAX(Cod_sessione) from recensioni的结果列名是MAX(Cod_sessione)。

你后续想用$row2['Id_sessione']和$row3['Cod_sessione']去取值时,数组里根本没有这两个键,自然就抛出Undefined index的报错了。

快速修复方案

给聚合查询的结果列起别名,让返回的列名和你后续要访问的键完全匹配:

修改你的查询语句:

$query2 = "Select MAX(Id_sessione) AS Id_sessione from sessione";
$query3 = "Select MAX(Cod_sessione) AS Cod_sessione from recensioni";

这样mysqli_fetch_assoc返回的数组里就会包含Id_sessione和Cod_sessione这两个键,你的后续代码就能正常取值了。

额外重要建议

  1. 处理空查询结果:如果sessione表或recensioni表是空的,$result2或$result3的查询结果会为空,mysqli_fetch_assoc会返回null,这时候访问数组键会触发新的错误。建议添加判断逻辑:
$row2 = mysqli_fetch_assoc($result2);
$Sessione = $row2 ? $row2['Id_sessione'] : 0; // 可根据业务需求调整默认值

$row3 = mysqli_fetch_assoc($result3);
$controllaSessione = $row3 ? $row3['Cod_sessione'] : 0;
  1. 防范SQL注入风险:你当前的$query直接把用户输入的$Titolo拼接到SQL语句里,存在严重的SQL注入漏洞。建议改用预处理语句:
$stmt = $conn->prepare("Select Titolo From recensioni where Titolo = ? limit 1");
$stmt->bind_param("s", $Titolo);
$stmt->execute();
$result = $stmt->get_result();

修改后的完整代码片段

$Titolo = $_POST['Titolo'];
$Rate = $_POST['Valutazione'];

// 用预处理语句防范SQL注入
$stmt = $conn->prepare("Select Titolo From recensioni where Titolo = ? limit 1");
$stmt->bind_param("s", $Titolo);
$stmt->execute();
$result = $stmt->get_result();

// 给聚合查询结果加别名
$query2 = "Select MAX(Id_sessione) AS Id_sessione from sessione";
$query3 = "Select MAX(Cod_sessione) AS Cod_sessione from recensioni";
$result2 = $conn->query($query2);
$result3 = $conn->query($query3);

$row = mysqli_fetch_assoc($result);
$row2 = mysqli_fetch_assoc($result2);
$row3 = mysqli_fetch_assoc($result3);

// 处理可能的空结果,避免报错
$controllaTitolo = $row ? $row['Titolo'] : null;
$Sessione = $row2 ? $row2['Id_sessione'] : 0;
$controllaSessione = $row3 ? $row3['Cod_sessione'] : 0;

内容的提问来源于stack exchange,提问作者R.Librizzi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:35:48