如何获取上次插入的记录ID?


9

我想获取数据库表中最后插入的行的记录ID。我正在尝试使用db_last_insert_id(),但是它引发了异常。

调用未定义的函数 db_last_insert_id()

如何获取上次插入的记录ID?


1
该功能在D7中不可用。drupal.org/node/729970
GoodSp33d

Answers:


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。的特定表中新插入记录ID。实际上,我需要如何在Rule中新注册的UserId(uid)
prashanth

不要忘记在function db_last_insert_id($table, $field)
Vladislav中

10

如果您自己不控制特定的插入查询,则可以始终使用简单的旧SQL查询:

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

我尝试使用Max(uid),但是我的记录超过了最后一个记录
prashanth

则该记录尚未插入,因此没有新的uid
Clive

我能够在数据库中看到新记录,但是我没有得到该记录的ID
prashanth

不,这是不可能的:)如果您可以在数据库中看到uid,则从逻辑上选择MAX(uid) 必须返回该uid。如果不是,则您的MySQL服务器非常损坏
Clive

只有在插入最后一条记录之前调用函数的情况下才有可能。
ЕлинЙ.

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

$ id包含表的最后插入的ID。只是回显$ 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));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.