PHP'de MSSQL'e Insert id nasıl eklenir?


7

Soru başlığı ne diyor. SELECT @@IDENTITY AS ins_id gibi bir sorgu ile, hangi tabloyu/veritabanını konuştuğumu belirtmek için tablo adını veya başka bir bilgiyi vermem gerekiyor mu?

14

@@IDENTITY. Çoğu durumda, muhtemelen geçerli kapsamda oluşturulan en yeni kimliği döndüren SCOPE_IDENTITY'u kullanmak isteyeceksiniz. Eğer table1 bir satır eklemek, ancak bu uç tablo2 bir satır ekler bir tetikleme halinde SCOPE_IDENTITYgelen kimlik döndürür iken

Örneğin, daha sonra @@IDENTITYtablo2 gelen kimlik döndürür tablo1.

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

Ben de gördüm: SEÇ CAST (BIRLEŞIM (SCOPE_IDENTITY(), int AS @@ KİMLİK)) 14 may. 142014-05-14 19:37:47

  0

Aşağı oy kullandı. Ben herhangi bir php görmüyorum, soru "PHP MSSQL içinde Insert id nasıl alınır". 27 haz. 152015-06-27 02:40:49


1

Hayır; mysql içinde SELECT LAST_INSERT_ID() gibi çok fazla çalışır, eklenen son kimlik değerini alır. Bununla ilgili endişeleriniz hakkında daha fazla bilgi için this in-depth examination'a göz atmak isteyebilirsiniz. Geçerli oturumda oluşturulan en yeni kimlikleri döndürür.


1

Burada kod snippet'i biraz Joomla koduna dayanmaktadır. $ dbh veritabanı bağlantısıdır (mssql_connect() sonucudur). $ KeyName argümanını iletirseniz anahtar adı (ID) güncellenir.

Bu kod MSSQL anahtar sözcüğünü kullanarak "OUTPUT" anahtarını kullanarak girilen değerin kimliğini (veya herhangi bir değerini) elde etmektir.

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

Bu çözümü seviyorum çünkü SCOPE_IDENTITY ile bir GUID (pk) alamadığınız için tüm temellerinizi kapsayacağına inanıyorum. Ama sql deyiminizdeki OUTPUT INSERTED ile birlikte mssql_result kullanımı otomatik artışlı tamsayılar veya benzersiz olan pk ile çalışır. GUID'ler gibi sokar. 02 ağu. 172017-08-02 17:49:58