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


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

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

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.


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

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));
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.