¿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?


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

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

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.


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

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));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.