반응형
Php가 최신 업데이트된 sql 프로시저 결과를 반환하지 않음
mariaDB, 코드 시그니터 php 사용
그러나 php codeigniter를 사용하여 동일한 프로시저를 실행하면 다른 결과 세트가 반환됩니다.
array(1) {
[0]=>
array(1) {
[0]=>
array(2) {
["stuScore"]=> string(7) "44.0000"
["answerdQues"]=> string(2) "50"
}
}
}
프로시저에서 쿼리...
SELECT sum(Score) as stuScore, count(distinct ta1.idTestQuestion) as answerdQues
FROM (select ta0.*, @running_time := if(@running_student = idStudent, @running_time, 0) + ta0.TimeTaken, date_add(ta0.StartTime, INTERVAL @running_time SECOND) as running_time, @running_student := idStudent
from (select tap.idStudent, ta.score, ta.idTestQuestion, tap.StartTime, ta.TimeTaken
from `testanswerpaper` tap
left join testanswer ta on ta.idTestAnswerPaper = tap.idTestAnswerPaper and (ta.Status = 'Flagged' || ta.Status = 'Answered')
where tap.`idTestQuestionPaper` = TestQuestionPaperID
order by tap.idStudent, ta.SortOrder, ta.idTestAnswer
) ta0
join (select @running_time := 0, @running_student) running
) ta1
join student s on s.idStudent = ta1.idStudent
join user u on s.idUser = u.idUser
WHERE ta1.running_time <= now()
group by ta1.idStudent
order by stuScore desc, answerdQues DESC;
php 코드는
$this->readDB = $this->load->database('read', TRUE);
$connectId = $this->readDB->conn_id ;
$sql = "call GetLeaderBoardData($TestQuestionPaperID);";
if (mysqli_multi_query($connectId,$sql))
{
do
{
// Store first result set
if ($result=mysqli_store_result($connectId)) {
$resultArray[] = mysqli_fetch_all($result, MYSQLI_ASSOC);
}
} while (mysqli_next_result($connectId));
}
var_dump($resultArray);
사용자 정의 변수가 세션 내내 값을 유지하므로 workbench에서 코드를 실행할 때 사용자 정의 변수의 값이 다를 수 있습니다.
이것을 제외하려면 , 를 리셋 합니다.@running_time
그리고.@running_student
값을 지정합니다.
set @running_time = null;
set @running_student = null;
SELECT sum(Score)...
이 코드를 시험하거나 사용하세요.$this->readDB->reconnect();
매번 절차 충돌 직전에 작동합니다.
try {
$this->readDB = $this->load->database('read', TRUE);
$this->readDB->reconnect();
$sql = "CALL GetLeaderBoardData(".$TestQuestionPaperID.")";
$resultArray = $this->readDB->query($sql)->custom_result_object();
$this->readDB->close();
} catch (Exception $e) {
echo $e->getMessage();
}
var_dump($resultArray);
가지고 있는 mysqli_fetch_all() 문에서 var_dump를 사용해 보십시오.어떤 물건이 반환되는지 알 수 있을 겁니다.
저장 프로시저에서 완전한 쿼리를 변수에 할당하고 SQL이 예상대로 실행되도록 인쇄합니다.
언급URL : https://stackoverflow.com/questions/58168082/php-not-returning-the-latest-updated-sql-procedure-result
반응형
'programing' 카테고리의 다른 글
JAVA_의 설정 방법Linux의 HOME은 모든 사용자를 대상으로 합니다. (0) | 2022.09.08 |
---|---|
순서가 매겨지지 않은 2개의 리스트(세트 이외)를 효율적으로 비교하려면 어떻게 해야 합니까? (0) | 2022.09.08 |
교리 쿼리에서 null 값을 필터로 지정하는 방법은 무엇입니까? (0) | 2022.09.08 |
어떻게 CentOS7에 MySQL루트 계정 비밀 번호를 바꾸도록? (0) | 2022.09.08 |
PHP: 부모 클래스에서 자식 클래스의 함수를 호출하는 방법 (0) | 2022.09.08 |