본문 바로가기

프로그래밍/PHP

연결 커넥션에서 INSERT 한 마지막 ID값 구하기



PHP 에서 데이터베이스 프로그래밍시,

 

1개의 테이블에 데이터를 삽입하고, 바로 삽입한 데이터의 ID 필드 값을 구해와야 하는 경우가 생길때가 있습니다.

 

예를들어, 1번 테이블은 사용자와 관련된 정보 테이블 A, 사용자와 관련된 여러개 이미지가 존재하는 테이블 B

(B테이블 존재하는 이유는 사용자와 관련된 이미지 패스를 무제한으로 저장한다는 가정하 정규화에 의거 설계된

테이블)

 

A사용자 데이터를 INSERT 하여 데이터를 삽입후,

 

바로 B테이블에 이미지 패스를 삽입해야하는

 

두번의 INSERT 가 필요하게 됩니다.

 

이때, SELECT MAX(`id`) FROM `A` 를 통해 마지막 삽입된 ID 를 가져오게 해서,

 

해당 ID를 가지고 B테이블에 데이터를 삽입하겠죠.

 

하지만 1가지 문제가 있습니다.

 

다중 사용자가 그시각 동시에 업로드를 진행하였다면?

 

네, SELECT MAX(`id`) FROM `A` 로는 내가 방금 입력한 데이터의 ID 값을 가져온다는 보장을 못합니다.

(A,B,C,D 사용자가 입력을 하였다면 최종 D사용자가 입력한 ID 를 가져오겠죠?)

 

이런 문제를 해결하기 위해 PHP 에서는 mysqli_insert_id 이라는 함수를 제공하고 있습니다.

 

 

자세한 링크 : http://www.php.net/manual/en/mysqli.insert-id.php

 

mysqli_insert_id 는 연결된 커넥션의 최종 삽입된 ID값을 가져옵니다.

 

즉, ABCDE 사용자들이 동시에 업로드처리를 하였다 하더라도,

 

내가 입력한 마지막 ID값만을 가져오게 됩니다.

 

 

class Database {
	
	private $host_name = "localhost";
	private $host_id = "root";
	private $host_password = "root";
	private $db_name = "test";
	private $conn;

	private function __construct() {
		$this->conn = mysqli_connect($this->host_name, $this->user_name, $this->user_password);
		mysqli_select_db($this->conn, $this->db_name);
		mysqli_set_charset($this->conn, "utf8");
		
    	}

	public function get_insert_id() {
		$id = mysqli_insert_id($this->conn);
		return $id;
	}
}

'프로그래밍 > PHP' 카테고리의 다른 글

PHP DB트랜잭션(DB Transaction) 처리방법  (0) 2014.06.25
CR Administrator 제작중  (0) 2012.01.21