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.