微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

准备好的语句无法在PHP中执行,但可以完美地在SQL控制台上运行

如何解决准备好的语句无法在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都很好。

但是,如果我在下面的sql控制台中执行它,则效果很好。

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

enter image description here

解决方法

通过在末尾添加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 举报,一经查实,本站将立刻删除。