2011-12-18 4 views
0

사용자 테이블에 행을 삽입하여 새 사용자를 등록합니다. user_id 필드 (자동 증가)를 가져 와서 다른 쿼리에서 사용자를 원합니다. 해결책은 여기에 제공됩니다 : How to get the ID of INSERTed row in mysql?하지만 새로운 행을 삽입 한 직후에 다른 사용자가 등록되면 어떤 일이 벌어 질지 궁금합니다. 그리고 PHP 코드에서 mysql_insert_id() 함수를 실행하기 전에 어떻게됩니까? 함수는 무엇을 반환할까요?삽입 된 행의 ID 가져 오기

답변

7

mysql_insert_id()은 현재 연결 (사용자 세션과 관련된)에 특정한 ID 인 auto_increment을 반환합니다. 따라서, 그런 유형의 경쟁 조건에서는 안전합니다. 즉, 삽입이 서로 겹치는 두 개의 동시 연결 사용자는 간섭없이 항상 자신의 세션에 대한 올바른 ID를 반환합니다.

+0

@AlirezaNoori PHP가 아닌 -이 함수는 원시 MySQL 함수'LAST_INSERT_ID()'를 호출하므로 실제로이 함수를 관리하는 데이터베이스입니다. –

+0

감사합니다. 오, 예, 알았습니다 (MYSQL 문서를 읽었습니다).하지만 잘못 말했습니다. 죄송합니다. 나를 고쳐 줘서 고마워. –

1

int mysql_insert_id ([ resource $link_identifier ])은 (는) 친구입니다. PHP는 문서에서

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

주 :

MySQL의 연결. 링크 식별자가 지정되지 않으면, mysql_connect()에 의해 열린 마지막 링크가 가정된다. 그러한 링크가 발견되지 않으면, mysql_connect()가 인수없이 호출 된 것처럼 링크를 생성하려고합니다. 연결이 없거나 설정되지 않으면 E_WARNING 수준의 오류가 생성됩니다.

성공시 이전 쿼리로 AUTO_INCREMENT 열에 대해 생성 된 ID. 이전 쿼리가 AUTO_INCREMENT 값을 생성하지 않으면 0, MySQL 연결이 설정되지 않은 경우 FALSE입니다.

mysql_insert_id()는 원시 MySQL C API 함수 mysql_insert_id()의 반환 유형을 long (PHP의 int) 형식으로 변환합니다. AUTO_INCREMENT 컬럼의 컬럼 유형이 BIGINT (64 비트) 일 경우 변환으로 인해 잘못된 값이 생길 수 있습니다. 대신 SQL 쿼리에서 내부 MySQL SQL 함수 LAST_INSERT_ID()를 사용하십시오. PHP의 최대 정수 값에 대한 자세한 내용은 정수 설명서를 참조하십시오.

마지막으로 수행 된 쿼리에서 mysql_insert_id()가 작동하기 때문에 값을 생성 한 쿼리 바로 다음에 mysql_insert_id()를 호출해야합니다.

MySQL SQL 함수 LAST_INSERT_ID()의 값은 항상 가장 최근에 생성 된 AUTO_INCREMENT 값을 포함하며 쿼리간에 재설정되지 않습니다.

관련 문제