Comment obtenir le dernier ID d'enregistrement inséré?

9

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

prashanth
la source
1
Cette fonction n'est pas disponible dans D7. drupal.org/node/729970
GoodSp33d

Réponses:

15

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 équivalent Drupal 7 est le suivant.

$id = db_insert('mytable')
  ->fields(array(
    'intvar' => 5,
    'stringvar' => 'hello world',
    'floatvar' => 3.14,
  ))
  ->execute();
4life
la source
Je veux vient d'être inséré id enregistrement à partir d' une table particulière de la db.Actually j'ai besoin nouvellement enregistré UserId (UID) dans les règles comment puis - je acheive il
prashanth
N'oubliez pas de spécifier le nom de la table et le nom du champ dansfunction db_last_insert_id($table, $field)
Vladislav
10

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();
Clive
la source
J'ai essayé d'utiliser Max (uid), mais
j'obtiens
Le disque n'a pas encore été inséré, il n'y a donc pas de nouvelle UID disponible
Clive
Je suis en mesure de voir le nouvel enregistrement dans la base de données , mais je ne reçois pas l'identification de ce
prashanth
Non, c'est impossible :) Si vous pouvez voir l'uid dans la base de données, la sélection logique MAX(uid) doit retourner cet uid. Sinon votre serveur MySQL est très très cassé
Clive
Cela ne serait possible que si votre fonction est appelée juste avant l'insertion du dernier enregistrement.
Елин Й.
0
  $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.

Krish
la source
0

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');
Meule
la source
0

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));
Angus Walker
la source