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