CI 묻고 답하기

제목 트렌젝션 질문드립니다2
카테고리 CI 2, 3
글쓴이 책상다리 작성시각 2021/03/09 16:15:59
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 8601   RSS
function notice_write($arrays)
{
    $this->db->trans_begin();
 
    $this->db->set('successflag',$arrays['successflag']);
    $this->db->set('delflag',$arrays['delflag']);
    $this->db->set('msg',$arrays['msg']);
    $this->db->set('paycode',$arrays['paycode']);
    $this->db->where('idx',$arrays['idx']); -> 이부분을 임의로 바꿔서 affected_rows가 0 이 나오도록
    $this->db->update('notice_table');
    $r_chk1 = $this->db->affected_rows();
 
    $this->db->set('id',$arrays['id']);
    $this->db->set('price',$arrays['price']);
    $this->db->set('info',$arrays['info']);
    $this->db->set('successflag',$arrays['successflag']);
    $this->db->set('dRegTime',$arrays['dRegTime']);
    $this->db->set('tRegTime',$arrays['tRegTime']);
    $this->db->insert('PointUse');
    $r_chk2 = $this->db->affected_rows();
 
    $this->db->set('nTotalUseDP','nTotalUseDP + ' . $arrays['price'], false);
    $this->db->set('dtLastUse',$arrays['last_date']);
    $this->db->where('id',$arrays['id']);
    $this->db->update('PointMain');
    $r_chk3 = $this->db->affected_rows();
 
    if ($r_chk1 < 1 || $r_chk2 < 1 || $r_chk3 < 1)
    {
        echo $r_chk1.$r_chk2.$r_chk3;
	    echo 'rollback';
        $this->db->trans_rollback();
	    $r_chk4 = $this->db->affected_rows();
	    echo $r_chk4;
        exit
 
    }
    else
    {
        echo $r_chk1.$r_chk2.$r_chk3;
	    echo 'commit';
        $this->db->trans_commit();
	    $r_chk4 = $this->db->affected_rows();
	    echo $r_chk4;
	    exit;
    }
}

 

이전에 조언받은데로 작업해보았습니다만, 롤백이 되지 않습니다;

결과값들을 찍어보면 0 1 1 rollback 0 이 나오고 

롤백이 실행되지 않은거 같습니다.

혹시 롤백하는데 추가로 database나 config 파일에서 설정을 해줘야 하는게 있는건가요?

아니면 제가 롤백에 뭔가 또 착각을 하고있는건지..

 다음글 특정 사용자의 세션 종료 (3)
 이전글 게시판 리스트 페이지 이동시 500에러가 납니다. (2)

댓글

PureAni / 2021/03/09 16:26:49 / 추천 0

롤백이 실행되지 않은거 같다라는 의문형이라는게 좀 이상한데..

현재 DB가 트랜잭션을 지원하나요?

한대승(불의회상) / 2021/03/09 16:45:23 / 추천 0

위 코드에서 트랜잭션 사용하는 이유가 뭔가요?

책상다리 / 2021/03/09 17:05:50 / 추천 0

PureAni님// 그렇네요 제가 봐도 어색한 표현입니다;; 왜저렇게 썼지..트랜젝션 지원여부를 확인할수 있나요? mysql 이노DB입니다.

한대승(불의회상)//세개의 구문중에 실행되지 않는 구문이 있으면 원래대로 돌려놔야해서 그렇습니다. 트렌젝션 말고 좋은 방법이 있을까요?

변종원(웅파) / 2021/03/10 09:06:03 / 추천 0

첫번째 조건 실행해서 적용된게 없으면 나머지 실행 안함 등 분기처리를 하시면 될 것 같네요.

트랜잭션으로 처리할 게 아니라고 보여집니다.

한대승(불의회상) / 2021/03/10 10:59:21 / 추천 0

@책상다리 innoDB 트랜잭션 지원합니다.

로직은 변종원님 의견에 1표