CI 묻고 답하기

제목 트랜젝션 질문입니다
카테고리 CI 2, 3
글쓴이 책상다리 작성시각 2021/03/05 13:12:43
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 8466   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']);
        $this->db->update('notice_table');

		$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');

		$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');

		if ($this->db->trans_status() === FALSE)
		{
		    $this->db->trans_rollback();
		    return false;

		}
		else
		{
		    $this->db->trans_commit();
		    return true;
		}
    }

 

위와같이 트랜젝션 구성했을때,

커밋이 실패해도 롤백이 되지 않고, 나머지 구문이 커밋되면서 true로 넘어가고 있습니다;

예를들어 첫번째 update구문에 이상한 값을 넣어서 update가 실행되지 않아도 나머지 두개의 구문이 커밋되고 그대로 처리가 됩니다.

일단은 메뉴얼에 사용법을 토대로 만들었는데 제 사용방법이 잘못된건지 궁금합니다

엑티브레코드로 해서 그런가 시험삼아 

$this->db->query('query');

이런식으로 3개 똑같이 구성해서 시도해봤는데도 마찬가지였습니다;

 다음글 Pagination 사용시 한글 깨지는 문제가 있어 문... (2)
 이전글 CI 4.1.1 서버 셋팅 오류 관련 문의드립니다. (7)

댓글

변종원(웅파) / 2021/03/05 13:26:16 / 추천 0

뭔가 잘못 생각하시고 있는 것 같네요.

업데이트 구문 자체가 틀려서 업데이트 액션 자체가 실행이 안됐을 때 트랜잭션이 실패하는 것이지

올바른 구문에 업데이트 조건이 맞지 않아 업데이트가 안된 것은 정상상태입니다.

원하시는 상황을 구현하려면 affected_rows()함수로 업데이트가 됐는지 여부에 따라 다음 액션을 실행하게 해야 합니다.

PureAni / 2021/03/05 13:34:37 / 추천 0

update 시 where 에 없는값..

즉, DB에 없어서 update 가 안되는 where 값을 넣었다는거죠?

그러면 정상적인 실행맞습니다.

책상다리 / 2021/03/05 13:38:00 / 추천 0

변종원님//아.........;;; 감사합니다.

PureAni님//감사합니다.