¿Cómo obtengo la última identificación de registro insertada?

9

Quiero obtener la ID de registro para la última fila insertada en una tabla de base de datos. Estoy tratando de usar db_last_insert_id(), pero está lanzando una excepción.

llamado una funcion indefinida db_last_insert_id()

¿Cómo obtengo la última identificación de registro insertada?

prashanth
fuente
1
Esa función no está disponible en D7. drupal.org/node/729970
GoodSp33d

Respuestas:

15

En Drupal 6 usarías un código similar al siguiente.

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

El código equivalente de Drupal 7 es el siguiente.

$id = db_insert('mytable')
  ->fields(array(
    'intvar' => 5,
    'stringvar' => 'hello world',
    'floatvar' => 3.14,
  ))
  ->execute();
4life
fuente
Yo quiero que acaba de insertar registro Identificación de una tabla en particular de la necesidad de nueva db.Actually I identificación de usuario registrado (UID) en las Reglas ¿Cómo puedo acheive que
prashanth
No olvide especificar el nombre de la tabla y el nombre del campo enfunction db_last_insert_id($table, $field)
Vladislav
10

Si no controla usted mismo la consulta de inserción en particular, siempre podría usar una consulta de SQL antigua simple:

$last_id = db_query('SELECT MAX(id_col) FROM {table}')->fetchField();
Clive
fuente
Intenté usar Max (uid), pero obtengo el registro por encima del último registro
prashanth
Entonces el registro aún no se ha insertado, por lo que no hay un nuevo uid disponible
Clive
Puedo ver el nuevo registro en la base de datos, pero no obtengo el Id de ese registro
prashanth
No, eso es imposible :) Si puede ver el uid en la base de datos, la selección lógica MAX(uid) debe devolver ese uid. Si no, su servidor MySQL está muy, muy roto
Clive
Eso sería posible solo si se llama a su función justo antes de insertar el último registro.
Елин Й.
0
  $id = db_insert('mytable')
       ->fields(array(
       'intvar' => 5,
       'stringvar' => 'hello world',
       'floatvar' => 3.14,
       ))
       ->execute();

$ id contiene el último id insertado de la tabla. solo echo $ id.

Krish
fuente
0

Si por alguna razón necesita obtener un valor de campo antes de insertarlo, esta es una solución alternativa para hacerlo.

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');
Almiar
fuente
0

Un truco burdo, pero funciona:

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('a','b')", array(), array('return' => Database::RETURN_INSERT_ID));

o

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('%s','%s')", array('a','b'), array('return' => Database::RETURN_INSERT_ID));
Angus Walker
fuente