개발개발/PHP

mysql_insert_id() 문제점

꾸냥 2012. 11. 30. 23:54

문제점이라 해야될지 버그라 해야될지.


mysql_insert_id 같은 경우 insert 시 현재 순서를 반환하고 update 시에는 다음 auto_increment 를 반환한다.


간단히 설명하면 1번행만 존재하고 있을때.


1번 데이터와 동일한 내용을 update 하면 mysql_insert_id() 가 "2" 을 반환한다.


해당 값이 절대적인 primary_key 인줄 알았는데 그게 아닌 auto_increment 에 따른 순서를 반환함


왜 몰랐지...ㅡㅡ; 상당히 위험한건데...


문제가 발생했던게 "INSERT ... ON DUPLICATE KEY UPDATE ..." 구문을 사용하게 되면 update 와 insert 를 쉽게 할 수 있는데 이렇게 될 경우 insert 인지 update 인지를 알아낼 수 없어서 이에 따라 mysql_insert_id 값을 사용할 수 없게 된다.


다른 방법을 찾지 못해서 우선 쿼리 날려서 처리했음.


[처리방법]

1. 업데이트가 일어난 테이블의 primary key 의 이름을 가져온다.

SHOW KEYS FROM `table_name` WHERE key_name = 'PRIMARY'


2. 해당 키 + 기존 업데이트시 사용했던 조건을 가지고 primary key 의 값을 알아낸다.

SELECT primary_key FROM table_name WHERE (update 조건)

반응형