Je veux obtenir l'ID d'enregistrement pour la dernière ligne insérée dans une table de base de données. J'essaie d'utiliser db_last_insert_id()
, mais il lève une exception.
Appel à une fonction non définie
db_last_insert_id()
Comment obtenir le dernier ID d'enregistrement inséré?
Dans Drupal 6, vous utiliseriez un code similaire au suivant.
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');
Le code Drupal 7 équivalent est le suivant).
$id = db_insert('mytable')
->fields(array(
'intvar' => 5,
'stringvar' => 'hello world',
'floatvar' => 3.14,
))
->execute();
Si vous ne contrôlez pas vous-même la requête d'insertion particulière, vous pouvez toujours utiliser une ancienne requête SQL simple:
$last_id = db_query('SELECT MAX(id_col) FROM {table}')->fetchField();
Une astuce grossière, mais ça marche:
$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('a','b')", array(), array('return' => Database::RETURN_INSERT_ID));
ou
$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('%s','%s')", array('a','b'), array('return' => Database::RETURN_INSERT_ID));
$id = db_insert('mytable')
->fields(array(
'intvar' => 5,
'stringvar' => 'hello world',
'floatvar' => 3.14,
))
->execute();
$ id contient le dernier id inséré de la table. faites juste echo $ id.
Si, pour une raison quelconque, vous devez obtenir une valeur de champs avant de l'insérer, il est possible de le faire avec.
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');