질문Q #19789
codegniter트랜잭션 관련 문의 사항이 있습니다.
순돌이332018-04-30 13:36:46

안녕하세요

php로 다음과 같은 기능을 개발하려고 하는데 어떻게 하면 될지 문의 드립니다. 

사용자가 excel로 여러개의 Row로 구성된 데이타를 등록 하는데요

예를 들면 500개의 Row를 등록 시 

30, 400번째 Row에서 에러가 발생해도 나머지 행의 데이타는 저장이 되었으면 합니다. (에러에 대한 log는 남김)

// controller 코드

for( $i = 0 ; i < 엑셀row 수 ; $i++) {

    $this->db->trans_begin(); //트랜잭션 시작

    //row 데[이타 처리 

    if( $this->db->trans_status() == FALSE) {

       $this->db->trans_rollback();

       $is_error = TRUE;

    }

    else

    {

        $this->db->trans_commit();

    }

}

위와 같이 하면 전체 데이타에 대한 Transaction 처리가 에러가 발생하면 이전 데이타도 같이 rollback이 될텐데요

Transaction을 전체 데이타와 Row데이타로 구분해서 처리가 가능 할까요?

 

답변3
#1 변종원(웅파) 2018-04-30 13:40:12

트랜잭션을 for문안에서 실행하면 되긴 하는데 의미가 없구요.

차라리 try catch를 이용해서 로그만 남기시도록 하시면 될 것 같네요.

#2 순돌이33 2018-04-30 14:18:30

답변 감사드립니다. 

그러면 500개의 Row를 올리다 한개의 row 때문에 에러가 나도 수정 후 다시 데이타를

등록하는 방법만 가능한가 보네요.. -.-;;

#3 변종원(웅파) 2018-04-30 17:24:20
php try catch 찾아보세요. ^^