मैं अंतिम सम्मिलित रिकॉर्ड आईडी कैसे प्राप्त करूं?


9

मैं डेटाबेस तालिका में अंतिम सम्मिलित पंक्ति के लिए रिकॉर्ड आईडी प्राप्त करना चाहता हूं। मैं उपयोग करने की कोशिश कर रहा हूं db_last_insert_id(), लेकिन यह एक अपवाद फेंक रहा है।

कॉल टु अंडीफ़्यंड फंकशन db_last_insert_id()

मैं अंतिम सम्मिलित रिकॉर्ड आईडी कैसे प्राप्त करूं?


1
वह फ़ंक्शन D7 में उपलब्ध नहीं है। drupal.org/node/729970
GoodSp33d

जवाबों:


15

Drupal 6 में आप निम्न के समान कोड का उपयोग करेंगे।

db_query("INSERT INTO {mytable} (intvar, stringvar, floatvar) VALUES (%d, '%s', %f)", 5, 'hello world', 3.14);
$id = db_last_insert_id('mytable', 'id_fieldname');

Drupal 7 समतुल्य कोड निम्नलिखित है।

$id = db_insert('mytable')
  ->fields(array(
    'intvar' => 5,
    'stringvar' => 'hello world',
    'floatvar' => 3.14,
  ))
  ->execute();

मैं db से एक विशेष तालिका से नव सम्मिलित रिकॉर्ड आईडी चाहता हूं। आम तौर पर मुझे नियमों में नव पंजीकृत उपयोगकर्ता आईडी (यूआईडी) की आवश्यकता होती है मैं इसे कैसे प्राप्त कर सकता हूं
प्रशस्ति

तालिका नाम और क्षेत्र का नाम निर्दिष्ट करने के लिए मत भूलनाfunction db_last_insert_id($table, $field)
व्लादिस्लाव

10

यदि आप विशेष प्रविष्टि क्वेरी को स्वयं नियंत्रित नहीं करते हैं, तो आप हमेशा एक पुरानी पुरानी SQL क्वेरी का उपयोग कर सकते हैं:

$last_id = db_query('SELECT MAX(id_col) FROM {table}')->fetchField();

मैंने मैक्स (यूआईडी) का उपयोग करने की कोशिश की, लेकिन मुझे पिछले रिकॉर्ड के ऊपर रिकॉर्ड मिल रहा है
प्रशांति

फिर रिकॉर्ड अभी तक डाला नहीं किया गया है, तो कोई नया uid उपलब्ध
क्लाइव

मैं डेटाबेस में नया रिकॉर्ड देख पा रहा हूं लेकिन मुझे उस रिकॉर्ड की आईडी नहीं मिल रही है
प्रशस्ति

नहींं, यह असंभव है :) यदि आप डेटाबेस में यूआईडी देख सकते हैं, तो तार्किक रूप से चयन करके उस यूआईडी MAX(uid) को वापस करना होगा । नहीं अपने MySQL सर्वर बहुत बहुत टूट जाता है
क्लाइव

यह तभी संभव होगा जब आपका कार्य अंतिम रिकॉर्ड डालने से ठीक पहले कहा जाए।
Елин Й

0
  $id = db_insert('mytable')
       ->fields(array(
       'intvar' => 5,
       'stringvar' => 'hello world',
       'floatvar' => 3.14,
       ))
       ->execute();

$ id में तालिका की अंतिम सम्मिलित आईडी है। बस इको $ id करो।


0

यदि किसी कारण से आपको इसे सम्मिलित करने से पहले फ़ील्ड मान प्राप्त करने की आवश्यकता है, तो यह एक ऐसा काम है जिसके साथ इसे करना है।

function _get_id($tableName, $fieldName) {

    $select = db_select($tableName, 'o');
    $fields = array(
        $fieldName,
    );
    $select->fields('o', $fields);
    $result = $select->orderBy($fieldName)->range(0,1)->execute()->fetchAll();
    return $result[0];
}

$lastId = _get_id('table_name' , 'uid');

0

एक क्रूड ट्रिक, लेकिन यह काम करता है:

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('a','b')", array(), array('return' => Database::RETURN_INSERT_ID));

या

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('%s','%s')", array('a','b'), array('return' => Database::RETURN_INSERT_ID));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.