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?

prashanth
sumber
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();
4life
sumber
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();
Clive
sumber
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.

Krish
sumber
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');
Rick
sumber
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));
Angus Walker
sumber