Bagaimana cara saya mendapatkan record record yang dimasukkan terakhir?


9

Saya ingin mendapatkan ID rekaman untuk baris yang dimasukkan terakhir dalam tabel database. Saya mencoba untuk menggunakan db_last_insert_id(), tetapi itu melempar pengecualian.

Panggil ke fungsi yang tidak ditentukan db_last_insert_id()

Bagaimana cara saya mendapatkan record record yang dimasukkan terakhir?


1
Fungsi itu tidak tersedia di D7. drupal.org/node/729970
— GoodSp33d

Jawaban:


15

Di Drupal 6 Anda akan menggunakan kode yang mirip dengan yang berikut ini.

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');

Kode setara Drupal 7 adalah sebagai berikut.

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

Saya ingin record id yang baru dimasukkan dari tabel tertentu dari db. Sebenarnya saya membutuhkan UserId yang Baru Terdaftar (uid) dalam Aturan bagaimana saya bisa mendapatkannya
— prashanth

Jangan lupa untuk menentukan nama tabel dan nama bidang difunction db_last_insert_id($table, $field)
— Vladislav

10

Jika Anda sendiri tidak mengontrol kueri sisipan tertentu, Anda selalu bisa menggunakan kueri SQL lama:

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

Saya mencoba menggunakan Max (uid), tetapi saya mendapatkan catatan di atas rekor terakhir
— prashanth

Maka catatan belum dimasukkan, jadi tidak ada uid baru yang tersedia
— Clive

Saya dapat melihat catatan baru dalam database tetapi saya tidak mendapatkan ID dari catatan itu
— prashanth

Tidak, itu tidak mungkin :) Jika Anda dapat melihat uid dalam database, memilih secara logis MAX(uid) harus mengembalikan uid itu. Jika tidak, server MySQL Anda sangat rusak
— Clive

Itu akan mungkin hanya jika fungsi Anda dipanggil tepat sebelum catatan terakhir dimasukkan.
— Елин Й.

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

$ id berisi id tabel yang disisipkan terakhir. lakukan saja echo $ id.


0

Jika karena alasan tertentu Anda perlu mendapatkan nilai bidang sebelum memasukkannya, ini adalah pekerjaan untuk melakukannya.

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

Trik kasar, tetapi berhasil:

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

atau

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('%s','%s')", array('a','b'), array('return' => Database::RETURN_INSERT_ID));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.