2009-02-22 7 views
7

प्रश्न शीर्षक क्या कहता है। SELECT @@IDENTITY AS ins_id जैसी क्वेरी के साथ, क्या मुझे तालिका का नाम या कोई अन्य जानकारी प्रदान करने की आवश्यकता है, यह निर्दिष्ट करने के लिए कि मैं किस तालिका/डेटाबेस के बारे में बात कर रहा हूं?PHP में एमएसएसक्यूएल में आईडी डालने के लिए कैसे?

उत्तर

14

@@IDENTITY वर्तमान सत्र में उत्पन्न सबसे हाल की पहचान देता है। ज्यादातर मामलों में आप शायद SCOPE_IDENTITY का उपयोग करना चाहते हैं, जो मौजूदा दायरे में उत्पन्न सबसे हालिया पहचान देता है।

उदाहरण के लिए, यदि आप table1 में एक पंक्ति सम्मिलित है, लेकिन उस डालने एक ट्रिगर जो table2 में एक पंक्ति सम्मिलित करता है आग, तो @@IDENTITY पहचान से table2 वापस आ जाएगी, जबकि SCOPE_IDENTITYसे पहचान वापस आ जाएगी तालिका 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

मैं भी देखा है: का चयन करें कास्ट (COALESCE (SCOPE_IDENTITY(), @@ पहचान) पूर्णांक के रूप में) – jjwdesign

+0

नीचे मतदान किया। मैं किसी भी php नहीं देखता, सवाल था "PHP में एमएसएसएलएल में सम्मिलित आईडी कैसे प्राप्त करें"। –

1

नहीं; यह mysql में SELECT LAST_INSERT_ID() की तरह काम करता है, जो अंतिम पहचान मान डाला जाता है। आप इसके बारे में चिंतित होने के बारे में अधिक जानकारी के लिए this in-depth examination पर एक नज़र डालना चाह सकते हैं।

1

यहां कुछ समय कोड कोड स्निपेट जूमला कोड पर आधारित है। $ dbh डेटाबेस कनेक्शन है (mssql_connect() का परिणाम)। यदि आप $ keyName तर्क पास करते हैं तो कुंजी नाम (आईडी) अपडेट किया जाता है।

यह कोड डालने वाले मान के आईडी (या किसी आवश्यक मूल्य) प्राप्त करने के लिए 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 (पीके) नहीं मिल सकता है .. लेकिन mskql_result का उपयोग करके आपके एसक्यूएल कथन में आउटपुट के साथ संयोजन में पीके के साथ काम करता है जो स्वत: वृद्धि वाले पूर्णांक या अद्वितीय होते हैं GUID की तरह डंक। – greaterKing

संबंधित मुद्दे