En son eklenen kayıt kimliğini nasıl alabilirim?


9

Bir veritabanı tablosundaki son eklenen satırın kayıt kimliğini almak istiyorum. Kullanmaya çalışıyorum db_last_insert_id(), ama bir istisna atıyor.

Tanımlanmamış işleve çağrı db_last_insert_id()

En son eklenen kayıt kimliğini nasıl alabilirim?


1
Bu işlev D7'de mevcut değildir. drupal.org/node/729970
GoodSp33d

Yanıtlar:


15

Drupal 6'da aşağıdakine benzer bir kod kullanırsınız.

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 eşdeğeri kod aşağıdadır.

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

Ben yeni bunu modernleşmek nasıl Kurallar db.Actually ben muhtaç Yeni Kayıtlı KullanıcıNo (uid) gelen belirli bir tablodan kayıt kimliği eklenen istediğiniz
Prashanth

Tablo adını ve alan adını belirtmeyi unutmayınfunction db_last_insert_id($table, $field)
Vladislav

10

Belirli ekleme sorgusunu kendiniz denetlemezseniz, her zaman düz eski bir SQL sorgusu kullanabilirsiniz:

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

Max (uid) kullanarak denedim, ancak son kayıt üzerinde rekoru alıyorum
prashanth

Daha sonra kayıt henüz eklenmedi, bu nedenle yeni bir kullanıcı kimliği mevcut değil
Clive

Veritabanındaki yeni kaydı görebiliyorum ama o kaydın
kimliğini

Hayır, bu imkansız :) mantıksal seçerek veritabanında uid görebiliyorsanız MAX(uid) gerekir o uid dönün. Değilse MySQL sunucunuz çok çok bozuk
Clive

Bu, yalnızca işleviniz son kayıt eklenmeden hemen önce çağrılırsa mümkün olabilir.
Елин Й.

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

$ id, tablonun son girilen kimliğini içerir. sadece echo $ id yapın.


0

Herhangi bir nedenden ötürü eklemeden önce bir alan değeri almanız gerekiyorsa, bunu yapmak için bir çözümdür.

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

Kaba bir numara ama işe yarıyor:

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

veya

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('%s','%s')", array('a','b'), array('return' => Database::RETURN_INSERT_ID));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.