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.