Come ottengo l'ultimo ID record inserito?


9

Voglio ottenere l'ID record per l'ultima riga inserita in una tabella del database. Sto provando a usare db_last_insert_id(), ma sta generando un'eccezione.

Chiamata a funzione non definita db_last_insert_id()

Come ottengo l'ultimo ID record inserito?


1
Questa funzione non è disponibile in D7. drupal.org/node/729970
GoodSp33d

Risposte:


15

In Drupal 6 useresti un codice simile al seguente.

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

Il codice equivalente di Drupal 7 è il seguente.

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

Voglio un ID record appena inserito da una particolare tabella dal db. In realtà ho bisogno di ID utente appena registrato (uid) in Regole come posso ottenerlo
prashanth

Non dimenticare di specificare il nome della tabella e il nome del campo infunction db_last_insert_id($table, $field)
Vladislav

10

Se non controlli tu stesso la particolare query di inserimento, puoi sempre usare una semplice query SQL vecchia:

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

Ho provato a usare Max (uid), ma sto ottenendo il record sopra l'ultimo record
prashanth

Quindi il record non è stato ancora inserito, quindi non è disponibile alcun nuovo uid
Clive

Sono in grado di vedere il nuovo record nel database ma non ottengo l'ID di quel record
prashanth

No, è impossibile :) Se riesci a vedere l'UID nel database, la selezione logica MAX(uid) deve restituire l'UID. Altrimenti il ​​tuo server MySQL è molto rotto
Clive

Ciò sarebbe possibile solo se la tua funzione viene chiamata poco prima dell'inserimento dell'ultimo record.
Елин Й.

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

$ id contiene l'ultimo ID inserito della tabella. fai solo eco $ id.


0

Se per qualche motivo hai bisogno di ottenere un valore di campi prima di inserirlo, questo è un modo per aggirarlo.

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 trucco grossolano, ma funziona:

$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));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.