안녕하세요. 찾다 찾다 도저히 원하는 답을 알수가 없어 이렇게 직접 문의드립니다.
$this->db->insert() 및 $this->db->update() 함수를 이용하여
데이터를 삽입 및 수정을 시도하였습니다.
CI에서는 정상 결과값을 리턴받았는데, 막상 테이블에서는 값이 추가되거나 수정되지 않습니다.
last_query 로 쿼리를 뽑아서 콘솔에서 실행하면 정상적으로 삽입 및 수정이 되는데
이상하게 CI에서 실행하면 정상동작 후인데도 데이터가 없네요.
신기한것은 insert의 경우 자동 증가 field 로 넘버링을 하는데 CI에서 실행 후 다른 프로세스에서 데이터가 삽입되면
손실된 데이터 갯수만큼 넘버링 추가되어 있습니다. 아마도 update 도 같은 이유인것 같은데요..
트랜잭션도 걸어보고 쿼리 실행 전 쿼리리셋도 해보고 해봤는데요. 계속 같은 현상이 발생되네요..;;;
왜 이런건지 도저히 모르겠네요..ㅜㅜ
아무쪼록 고수님들의 답변 부탁드리겠습니다. 감사합니다.
태영쓰) 위에서 질문드린대로 last_query로 쿼리를 스트링으로 뽑아 콘솔에서 직접 쿼리를 날리면 정상적으로 insert 및 update 가 됩니다. (동일 테이블을 사용하는 다른 로직에서는 잘 되거든요.;;)
insert_id 값도 잘 나옵니다ㅜㅜ
웅파) 해당 테이블 외에 다른 테이블에서는 비슷한 로직에서 다들 정상적으로 돌아가는데요.. mysql 설정 문제라면 다른 테이블도 같은 현상이 발생되어야 하지 않나요?
그래도 혹시 몰라 확인해 봤는데. auto commit은 1로 설정이 되어 있네요..^^;;
@한대승
소스는 별거 없는데요.. 아래와 같습니다.
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 로 처리가 완료되는 모델인데. 막상 테이블에는 데이터가 없습니다.