简体   繁体   English

准备好的语句未在 PHP 中执行,但在 SQL 控制台上完美运行

[英]Prepared statement not executing in PHP but works on SQL console perfectly

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;
        }

    }

I was expecting 'ok' from the above function but it returning false.我从上面的 function 期待“好的”,但它返回错误。 That means the $stmt is not executing.这意味着 $stmt 没有执行。 Also my both parameters $student_id & $exam_id are fine.我的两个参数 $student_id 和 $exam_id 也很好。

But if I execute it in my SQL console like below it works perfectly.但是,如果我在我的 SQL 控制台中执行它,如下所示,它可以完美运行。

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 = 18 AND exams.id = 24

在此处输入图像描述

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;
        }

    }

I was expecting 'ok' from the above function but it returning false.我从上面的 function 期待“好的”,但它返回错误。 That means the $stmt is not executing.这意味着 $stmt 没有执行。 Also my both parameters $student_id & $exam_id are fine.我的两个参数 $student_id 和 $exam_id 也很好。

But if I execute it in my SQL console like below it works perfectly.但是,如果我在我的 SQL 控制台中执行它,如下所示,它可以完美运行。

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 = 18 AND exams.id = 24

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM