PHP에서 MSSQL의 삽입 ID를 얻는 방법은 무엇입니까?


7

제목에 나오는 질문에 무엇이 있습니까? SELECT @@IDENTITY AS ins_id과 같은 쿼리를 사용하면 내가 말하는 테이블/데이터베이스를 지정하기 위해 테이블 ​​이름이나 다른 정보를 제공해야합니까?

14

@@IDENTITY은 현재 세션에서 생성 된 최신 ID를 반환합니다. 대부분의 경우 SCOPE_IDENTITY을 대신 사용하여 현재 범위에서 생성 된 최신 ID를 반환하는 것이 좋습니다. 당신이 에 행을 삽입하지만 삽입 표 2에 행을 삽입하는 트리거를 발생하는 경우 SCOPE_IDENTITY에서 신원을 반환하는 반면

는 예를 들어, @@IDENTITY표 2에서 신원을 반환합니다 표 1.

INSERT INTO my_table (my_column) VALUES ('test') 

-- return the identity of the row you just inserted into my_table 
-- regardless of any other inserts made by triggers etc 
SELECT SCOPE_IDENTITY() AS ins_id 
  0

내가도 본 적이 : SELECT CAST (COALESCE (SCOPE_IDENTITY(), int로서 @@ IDENTITY는)) 14 may. 142014-05-14 19:37:47

  0

아래로 투표했다. 나는 PHP를 보지 못했다. 질문은 "PHP로 MSSQL에서 Insert id를 얻는 법"이었다. 27 jun. 152015-06-27 02:40:49


1

아니오; mysql의 SELECT LAST_INSERT_ID()와 매우 흡사하게 삽입 된 마지막 신원 값을 검색한다. 걱정할만한 것에 대해 더 알고 싶으시면 this in-depth examination을 참조하십시오.


1

다음은 다소 Joomla 코드를 기반으로 한 코드 단편입니다. $ dbh는 데이터베이스 연결입니다 (mssql_connect()의 결과). $ keyName 인수를 전달하면 키 이름 (ID)이 업데이트됩니다.

이 코드는 삽입 된 값의 ID (또는 필요한 값)를 얻기 위해 MSSQL 키워드 "OUTPUT"을 사용합니다.

function mssql_insertObject($table, &$object, $keyName = NULL) 
{ 
    global $dbh; 

    if($keyName) { 
     $fmtsql = 'INSERT INTO '. $table .' (%s) OUTPUT INSERTED.' . $keyName . ' VALUES (%s) '; 
    } 
    else { 
     $fmtsql = 'INSERT INTO '. $table .' (%s) VALUES (%s) '; 
    } 

    $fields = array(); 

    foreach (get_object_vars($object) as $k => $v) { 
     if (is_array($v) or is_object($v) or $v === NULL) { 
      continue; 
     } 

     if ($k[0] == '_') { //internal field 
      continue; 
     } 

     $fields[] = $k; 
     $values[] = "'" . str_replace("'", "''", $v) . "'"; 
    } 

    $sql = sprintf($fmtsql, implode(",", $fields) , implode(",", $values)); 

    $query = mssql_query($sql, $dbh); 

    if($query === false) { 
     return false; 
    } 

    if(is_resource($query)) 
    { 
     if($keyName) { 
      $id = mssql_result($query, 0, 0); 

      if($id) { 
       $object->$keyName = $id; 
      } 
     } 

     mssql_free_result($query); 
    } 

    return true; 
} 
  0

나는 당신이 SCOPE_IDENTITY와 함께 GUID (pk)를 얻을 수 없기 때문에이 솔루션을 좋아한다. 그러나 sql 문에서 OUTPUT INSERTED와 함께 mssql_result를 사용하면 pk의 자동 증가 정수 또는 고유 GUID와 같은 소리. 02 aug. 172017-08-02 17:49:58