如何解决准备好的语句无法在PHP中执行,但可以完美地在SQL控制台上运行
function examResult($student_id,$exam_id){
global $conn;
$stmt = $conn->prepare("SELECT SUM(CASE WHEN answers.answered_option=questions.correct_option THEN questions.marks ELSE 0 END) AS obtain,exams.exam_name,exams.total_marks,exams.pass_marks FROM exams INNER JOIN questions ON exams.id=questions.exam_id INNER JOIN answers ON answers.question_id=questions.id WHERE answers.student_id = ? AND exams.id = ? ");
if($stmt){
return 'ok';
$stmt->bind_param('ii',$student_id,$exam_id);
$stmt->execute();
$result = $stmt->get_result();
if($result){
$row = $result->fetch_assoc();
return $row;
}
} else{
return false;
}
}
我期望上面的函数“确定”,但是它返回false。这意味着$ stmt没有执行。另外,我的两个参数$ student_id和$ exam_id都很好。
SELECT SUM(CASE WHEN answers.answered_option=questions.correct_option THEN questions.marks ELSE 0 END) AS obtain,exams.pass_marks FROM exams INNER JOIN questions ON exams.id=questions.exam_id INNER JOIN answers ON answers.question_id=questions.id WHERE answers.student_id = 18 AND exams.id = 24
解决方法
通过在末尾添加GROUP BY语句来解决它。
$stmt = $conn->prepare("SELECT SUM(CASE WHEN answers.answered_option=questions.correct_option THEN questions.marks ELSE 0 END) AS obtain,exams.exam_name,exams.total_marks,exams.pass_marks FROM exams INNER JOIN questions ON exams.id=questions.exam_id INNER JOIN answers ON answers.question_id=questions.id WHERE answers.student_id = ? AND exams.id = ? GROUP BY exams.id");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。