CI 묻고 답하기

제목 insert_id 질문 좀 드릴게요
글쓴이 implemental 작성시각 2014/10/06 17:21:48
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 19507   RSS
안녕하세요. 
프로젝트 도중 어쩔 수 없이 회원 가입을 하기 위해서는 3개의 테이블에 insert해야 되는 상황이라서
$this->db->insert_id(); 

를 이용하는 중입니다. 

먼저 table1에 pk이자 ai 값인 user_id라는 컬럼이 있다 가정을 하고 아래와 같이 했는데요
 
        $data1 = array(
            'user_id' => $this->input->post('user_id'),  //pk, ai
            ...생략
            );
        $this->DB1->insert('table1', $data1);
        
        $data2 = array(
            'user_id' => $this->DB1->insert_id(),  //pk, ai
            ...생략
            );
        $this->DB1->insert('table2', $data2);
        
        $data3 = array(
            'table3_id' => $this->input->post('table3_id"); //pk, ai  
            ...생략
            'xx_member_id' => $this->DB1->insert_id(),   //pk, ai 아님
            ); 
        $this->DB1->insert('table3', $data3);    



(table2의 pk도 user_id입니다. 하지만 table3의 pk는 다른 컬럼입니다.)

table1과 2의 user_id라는 컬럼은 동일한 컬럼명으로 되어있고
table3은 다른 이름으로 되어있습니다.

$this->output->enable_profiler(TRUE); 
찍어보니까 table2에는 정상적으로 insert_id()가 동작을 하는데,
table3에는 0이 찍히더군요..
insert_id를 2개이상 사용하려면 어떻게 하면 될까요?
 
 다음글 codeigniter 트랜잭션에서 롤백 시 오류가 되는... (2)
 이전글 ajax 질문좀 드리겠습니다. (6)

댓글

변종원(웅파) / 2014/10/06 17:51:30 / 추천 0
실제 소스는 아래와 같이 되어 있는데 안되려면 다 안되야 하고 되려면 다 되어야 합니다.
 
function insert_id()
{
   return @mysql_insert_id($this->conn_id);
}


혹시 두번째 테이블의 user_id가 big int는 아닐지요?
big int형이면 값을 못가져옵니다.

검색해보니 autoincrement가 적용되어야 값을 가져오네요.

보통 3개의 테이블에 넣는다 하더라도 table1의 id를 키로 사용하는데 table3만 다르게 해야하는 이유가 있을까요?



http://php.net/manual/kr/function.mysql-insert-id.php

implemental / 2014/10/07 09:47:38 / 추천 0
@웅파님 / 저도 퇴근하고 머리 식히면서 보니  말씀대로 AI가 적용되야 값을 가져오네요. 
일단 꼼수로 해결을 했습니다. table3만 다르게 하는 이유는 웹이 아닌 프로그램에서 그렇게 사용을 하고 있어 어쩔 수 없이 
이렇게 해야 되서 질문 올렸던거에요 :D

꼼수는 아래와 같이 $data1 먼저 insert 하고 마지막에 $data2, $data3 을 같이 해주니 정상적으로 동작을 하네요 ^^;
 
$data1 = array(
    'user_id' => $this->input->post('user_id'),  //pk, ai
    ...생략
    );
$this->DB1->insert('table1', $data1);

$data2 = array(
    'user_id' => $this->DB1->insert_id(),  //pk, ai
    ...생략
    );
$data3 = array(
    'table3_id' => $this->input->post('table3_id"); //pk, ai  
    ...생략
    'xx_member_id' => $this->DB1->insert_id(),   //pk, ai 아님
    ); 
$this->DB1->insert('table2', $data2);
$this->DB1->insert('table3', $data3);