CI 묻고 답하기

제목 CI table insert. update 성공 후 데이터 실종
카테고리 CIBOARD
글쓴이 거부기 작성시각 2019/08/13 17:51:29
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 12587   RSS

안녕하세요. 찾다 찾다 도저히 원하는 답을 알수가 없어 이렇게 직접 문의드립니다.

$this->db->insert() 및 $this->db->update() 함수를 이용하여

데이터를 삽입 및 수정을 시도하였습니다.

CI에서는 정상 결과값을 리턴받았는데, 막상 테이블에서는 값이 추가되거나 수정되지 않습니다.

last_query 로 쿼리를 뽑아서 콘솔에서 실행하면 정상적으로 삽입 및 수정이 되는데

이상하게 CI에서 실행하면 정상동작 후인데도 데이터가 없네요.

신기한것은  insert의 경우 자동 증가 field 로 넘버링을 하는데 CI에서 실행 후 다른 프로세스에서 데이터가 삽입되면

손실된 데이터 갯수만큼 넘버링 추가되어 있습니다. 아마도 update 도 같은 이유인것 같은데요..

트랜잭션도 걸어보고 쿼리 실행 전 쿼리리셋도 해보고 해봤는데요. 계속 같은 현상이 발생되네요..;;;

왜 이런건지 도저히 모르겠네요..ㅜㅜ

아무쪼록 고수님들의 답변 부탁드리겠습니다. 감사합니다.

 

 다음글 join에서 테이블 alias를 사용중인데, 동일한 필... (3)
 이전글 pdo 쿼리빌더를 사용해야 할지 고민입니다. (6)

댓글

태영쓰 / 2019/08/13 18:58:44 / 추천 0
insert의 경우 혹시 해당하는 컬럼이 유니크키가 설정되어있지 않나요? insert 후 $this->db->insert_id()또한 정상 반환되나요?
변종원(웅파) / 2019/08/13 22:12:29 / 추천 0
mysql 설정이 auto commit 이 아닐 수도 있습니다.
거부기 / 2019/08/14 09:38:49 / 추천 0

태영쓰) 위에서 질문드린대로 last_query로 쿼리를 스트링으로 뽑아 콘솔에서 직접 쿼리를 날리면 정상적으로 insert 및 update 가 됩니다. (동일 테이블을 사용하는 다른 로직에서는 잘 되거든요.;;)

insert_id 값도 잘 나옵니다ㅜㅜ

거부기 / 2019/08/14 09:40:08 / 추천 0

웅파) 해당 테이블 외에 다른 테이블에서는 비슷한 로직에서 다들 정상적으로 돌아가는데요.. mysql 설정 문제라면 다른 테이블도 같은 현상이 발생되어야 하지 않나요?

그래도 혹시 몰라 확인해 봤는데. auto commit은 1로 설정이 되어 있네요..^^;;

한대승(불의회상) / 2019/08/14 12:15:19 / 추천 0
@거부기 코드의 일부를 보여주세요.
거부기 / 2019/08/14 13:26:24 / 추천 0

@한대승

소스는 별거 없는데요.. 아래와 같습니다.

public function insert_apiLog($city, $provider, $api_type, $request_url)
    {
        // API 제공업체의 종류별로 api_type 을 재정의
        if ($provider == '업체1') {
            switch ($api_type) {
                case 'culture'  :   $api_type = '문화'; break;
                case 'festival' :   $api_type = '축제'; break;
                case 'facility' :   $api_type = '시설'; break;
                case 'treasure' :   $api_type = '문화재'; break;
            }
        }

        $param = array(
            'city'      => $city,
            'provider'  => $provider,
            'api_type'  => $api_type,
            'request_url' => $request_url,
            'request_time'  => date("Y-m-d H:i:s"),
        );

        $this->db->set($param);
        $this->db->insert('log_api');
        $result = $this->db->insert_id();

        if (empty($result)) {
            $return['result'] = 'error';
        } else {
            $return['result'] = 'success';
            $return['data'] = $result;
        }
        return $return;
    }

위 함수는 foreach 로 4번이 도는데요.. 첫번째 루프인 api_type 이 문화는 정상으로 insert 되는데,

두번쨰 축제부터 마지막 문화재까지는 insert 되지가 않네요. ㅜㅜ

$param 을 로그 찍어보면 4번 나오구요. insert_id 값도 네번 나옵니다.

리턴값이 비어있지 않아 success 로 처리가 완료되는 모델인데. 막상 테이블에는 데이터가 없습니다.

변종원(웅파) / 2019/08/14 16:25:20 / 추천 0
로직 다른 곳에서 $this->db 가 선언되지 않았는지도 살펴보세요.