调用存储过程getMarks()时PHP页面报undefined index:student_name错误
解决PHP调用存储过程时"undefined index: student_name"的问题
看起来你的存储过程在phpMyAdmin里能正常返回结果,但PHP代码获取不到student_name字段,核心原因是存储过程执行过程中产生了多个结果集,而PDO默认只获取第一个空结果集——你的存储过程里有SET语句,这些语句会返回空的结果集,真正的查询结果在后面的结果集中。
下面是具体的解决方案:
1. 开启PDO错误模式(排查隐藏问题)
首先,开启PDO的异常错误模式,这样能快速定位是否有其他潜在错误:
// 在初始化PDO连接后添加 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
2. 正确处理存储过程的多结果集
存储过程中的SET语句会生成空结果集,我们需要跳过这些结果集,才能拿到真正的查询数据:
try { $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pstmt = 'call getMarks()'; $stmt = $dbh->prepare($pstmt); $stmt->execute(); $item = []; // 遍历所有结果集,找到包含数据的那一个 do { $result = $stmt->fetchAll(PDO::FETCH_ASSOC); if (!empty($result)) { $item = $result; } } while ($stmt->nextRowset()); // 现在$item就是你需要的结果数组 } catch (PDOException $e) { die("数据库错误: " . $e->getMessage()); }
3. 验证结果并展示
修改完后,重新执行var_dump($item),应该能看到包含student_name、QUIZ1、QUIZ2等字段的正确数组了,之后再用你的循环展示数据就不会报错了。
额外提醒:检查存储过程里的拼写,你写的assessmet_no是不是少了一个n?(正确应该是assessment_no?)不过既然phpMyAdmin能正常执行,可能你的字段名确实是这个,这个可以忽略,但如果后续还有问题可以排查这个点。
内容的提问来源于stack exchange,提问作者Mohammad Thaqif Taher
相关产品推荐
相关产品推荐

