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.