제목 | CI에서 내가 알고 싶은 정보는 다시 CI로 돌아온다 | ||
---|---|---|---|
글쓴이 | risa | 작성시각 | 2013/05/08 13:52:32 |
|
|||
오늘 다시 한번 CI에 굴복 했습니다 털썩. $this->db->insert($table, $data); 이후에 최근 글을 가져올려고 여태 $this->db->select_max("num"); 를 했습니다. 트리거 명령처럼 NEW.num 같은게 있으면 참 좋을텐데... 라는 생각이 들면서 분명히 CI 헬퍼에서 한번 본 기억이 났습니다 못보더라도 CI에서 안만들었을리 없다는 생각에 찾아보니 $this->db->insert_id(); 네. 분명히 있죠. 그런데 문득 드는 궁금함.... 대체 insert_id(); <- 이거 뭐하는 녀석이야? 이거 그냥 $this->db->select_max("num"); 같은거면 꼭 쓸 이유가 없으니깐 말이죠. 열심히 찾아서 들어가니 리턴 하나 합니다. mysql_insert_id()
를 리턴 하더군요. [참고로 MSSQL은 SCOPE_IDENTITY()] 저것과 연관되서 검색 되는 다른 기능은 LAST_INSERT_ID() 입니다.
차이는 mysql_insert_id 는 쿼리를 기준으로 라스트 코드값. LAST_INSERT_ID 는 auto_increment 라스트 값 입니다. 보너스. php.net 에 올라온 다른 함수도 봤습니다만 $sql = "UPDATE `mytable` SET `mytable_id`= LAST_INSERT_ID(`mytable_id` + 1) WHERE ...;
function get_new_id($table){
$select = 'select max(`id`) +1as `id` from `'.$table.'` where `id` != <some big id>'; $query = mysql_query($select); $obj = mysql_fetch_object($query); return $obj->id; $this->db->insert_id(); 우리에겐 insert_id가 있는 이상 큰 의미는 없는듯. 한개를 알기 위해서 여러개를 알게 해주네요 -_-! |
|||
다음글 | ci입문서 드디어 세상에 나옵니다. (21) | ||
이전글 | CI3 공개가 임박한것 아닐까요 (2) | ||
들국화
/
2013/05/08 14:12:04 /
추천
0
|
risa
/
2013/05/08 14:18:37 /
추천
0
네. 저도 그게 불안해서 확 트랜잭션이라도 걸어버릴까? 했는데
셀렉트 문을 포함시킨 트랜잭션은 미치지 않고서야 ( ..) 그래서 찾아본것이 LAST_INSERT_ID() 와 mysql_insert_id() 입니다. 일단 PHP라인에서 처리하는게 아니라 MYSQL 라인에서 처리 한다는게 더 신뢰도가 높으니깐요. 범용성을 생각 해서인지 mysql_insert_id 를 선택한 CI 따라 mysql_insert_id를 자주 써야겠어요. |
변종원(웅파)
/
2013/05/08 15:11:56 /
추천
0
매번 하는 이야기지만 매뉴얼이 갑!!!! 입니다. ^^
|
를 사용하면 혼자만 쓰는게 아니면 잘못될된 값을 가져올수 있습니다. Insert후에 바로 Select 하기 때문에 아주 빠르게 이루어 짐으로 가능 성은 낮으나 만약 동시에 insert 가 실행 되면 잘못된 값을 가져올수 있을것 같네요.
아니면 테이블에 락킹을 걸어야 제대로된 값을 가져 옵니다.
LAST_INSERT_ID() 값은 해당세션의 값을 가져옮으로 정확한 값을 가져 올수 있습니다.