2011-09-20 5 views
1

나는PHP에서 방금 입력 한 행의 자동 증가 인 기본 키를 얻는 방법은 무엇입니까?

$result = mssql_query("INSERT into CALLER 
    (status, media, media_2, first_name, last_name, street_address, city, 
    state, zipcode, home_phone_no, mobile_phone_no,email, problem, 
    medical_condition, comments, updated_date) 
    VALUES  
    ('CALL', '$media', '$media_2','$fname','$lname', '$street_addr', '$city', 
    $state','$zip', '$phone_alt', '$phone','$email','$problem','$mc', 
    '$comments',GetDate()); "); 

primary key for the table CALLER is an auto-increment 같은 SQL 쿼리가 있습니다. 이 쿼리 후에 방금 삽입 된 행의 기본 키를 얻으려면 어떻게해야합니까?

답변

0

테이블에 CANDIDATE KEY이있는 경우이를 사용하여 마지막으로 삽입 된 행을 검색 할 수 있습니다.

status, emailproblem 열로 구성된 후보 키가 있다고합시다.

그런 다음 삽입 한 직후에 이와 같은 쿼리를 실행할 수 있습니다.

$query = "SELECT id FROM CALLER 
      WHERE 
       status = '" . $status . "' 
       AND email = '" . $email . "' AND 
       problem = '" . $problem . "'"; 
mssql_query($query); 

이렇게하면 해당 항목의 ID가 반환됩니다.

업데이트 난 그냥 페미의 대답에 미카엘에 의해 주석이보고
, 당신은 현재 범위에서 현재 연결을 위해 라스를 삽입 ID를 반환 SCOPE_IDENTITY()

를 사용할 수 있습니다. 따라서 여러 인스턴스가 인터리브 된 삽입을 수행하더라도 사용자를 위해 작동해야합니다.

그래서 당신은 단순히

$res = mssql_query('SELECT SCOPE_IDENTITY()'); 
+0

감사. 그거야. – sul4bh

4

수정 : 사용하십시오.

$query = mssql_query("SELECT @@IDENTITY"); 
$row = mssql_fetch_assoc($query); 
+0

이러한 삽입 쿼리를 동시에 내 많은 클라이언트를 수행 할 수 있습니다 삽입 한 후이 작업을 수행 할 수 있습니다. 따라서 가장 최근의 PK가 작동하지 않습니다. 말해, 나는 userA이고 삽입 쿼리를 담당했습니다. 트리거 한 쿼리에 대해 PK를 생성 할 수 있습니까? – sul4bh

+0

hight rep 사용자로서 우리는 항상 읽을 수있는 코드를 작성해야합니다. 그래서 $ q와 $ r을 $ query와 $ row로 바꿉니다. 변수가 나중에 나타나는 코드의 어디에서나 여기에있는 것이 아니라 더 읽기 쉽습니다. unset ($ query) 또는 process ($ row)와 같이 ... – markus

+0

또한 2 행의 변수 이름을 $ q에서 $ query로 변경해야합니다. – sul4bh

관련 문제