Как получить последний вставленный идентификатор записи?


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

Мне нужен только что вставленный идентификатор записи из конкретной таблицы из базы данных. На самом деле мне нужен недавно зарегистрированный идентификатор пользователя (uid) в Правилах, как я могу его получить
— prashanth

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

10

Если вы не управляете конкретным запросом вставки самостоятельно, вы всегда можете использовать обычный старый запрос SQL:

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

Я пытался использовать Max (uid), но я получаю запись выше последней записи
— prashanth

Тогда запись еще не была вставлена, поэтому нет нового доступного uid
— Клайв

Я могу видеть новую запись в базе данных, но у меня нет идентификатора этой записи
— prashanth

Нет, это невозможно :) Если вы можете увидеть uid в базе данных, логический выбор MAX(uid) должен вернуть этот uid. Если нет, то ваш сервер MySQL очень сильно сломан
— Clive

Это было бы возможно, только если ваша функция вызывается непосредственно перед вставкой последней записи.
— Елин Й.

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.