Як отримати останній вставлений ідентифікатор запису?


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. Фактично мені потрібен нещодавно зареєстрований UserId (uid) у Правилах, як я можу це отримати
Prashanth

Не забудьте вказати ім'я таблиці та ім’я поля вfunction db_last_insert_id($table, $field)
Владислав

10

Якщо ви не керуєте конкретним запитом вставки, ви завжди можете використовувати звичайний старий запит SQL:

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

Я спробував використовувати Макс (uid), але я отримую рекорд вище останнього запису
13

Тоді запис ще не вставлено, тому немає нового uid
Clive

Я можу побачити новий запис у базі даних, але я не отримую ідентифікатор цього запису
прашант

Ні, це неможливо :) Якщо ви можете бачити uid в базі даних, логічно вибрані MAX(uid) повинні повернути цей uid. Якщо не ваш сервер MySQL дуже зламаний
Клайв

Це було б можливо лише в тому випадку, якщо ваша функція викликається безпосередньо перед вставкою останнього запису.
Елін Й.

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

$ id містить останній вставлений ідентифікатор таблиці. просто зробіть echo $ 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.