PHP测验运行时无法显示题目及选项的技术问题
我来帮你梳理这段代码里导致题目及选项无法正常显示的几个核心原因:
截断的SQL查询语句
你第二个获取题目查询的代码明显没写完:select * from question where tes...,这会直接触发SQL语法错误,executeQuery无法返回有效结果集,自然拿不到任何题目数据。你需要补全这个查询的条件(比如应该是where testid = {$_SESSION['testid']} and qnid not in (...)之类的逻辑)。废弃的
mysql_*扩展
代码中使用的mysql_fetch_array属于PHP已经废弃的mysql_*扩展,PHP 7及以上版本已经完全移除了这个扩展。如果你的服务器运行的是PHP7+,这段代码会直接抛出致命错误,中断执行流程,根本到不了显示题目的步骤。建议立刻切换到mysqli_*扩展或者PDO来操作数据库。不安全的SQL变量拼接
直接把$_SESSION['stdid']和$_SESSION['testid']拼进SQL语句里存在两个问题:- 如果这些变量是字符串类型(而非纯数字),没加单引号会导致SQL语法错误;
- 存在严重的SQL注入风险,同时可能因为变量格式不规范导致查询返回空结果。
正确的做法是使用参数化查询,避免直接拼接变量。
未验证会话变量的完整性
代码只检查了$_SESSION['stdname']是否存在,但没有验证$_SESSION['stdid']和$_SESSION['testid']是否存在且为有效值。如果这两个变量为空或者非法,第一个查询会变成where stdid= and testid=,直接触发SQL语法错误,后续逻辑全部无法正常执行。建议在开头增加完整性校验:if(isset($_SESSION['stdname'], $_SESSION['stdid'], $_SESSION['testid']) && is_numeric($_SESSION['stdid']) && is_numeric($_SESSION['testid'])) { // 后续业务逻辑 } else { echo "会话无效,请重新登录"; // 或者跳转到登录页面 exit; }未处理查询失败的场景
代码没有检查executeQuery的返回值,如果查询失败(比如数据库权限不足、表不存在),$result会返回false,此时调用mysql_fetch_array会触发警告,同时无法正确收集已答题目ID,导致后续查询逻辑出错。建议每次执行查询后都增加错误检查:$result = executeQuery("select qnid, stdanswer,answered from studentquestion where stdid=".$_SESSION['stdid'].' and testid='.$_SESSION['testid'].';'); if (!$result) { // 调试阶段可以输出错误信息,生产环境需替换为友好提示 die(mysql_error()); }
内容的提问来源于stack exchange,提问作者Javed Ansari

