Wie erhalte ich die zuletzt eingefügte Datensatz-ID?


9

Ich möchte die Datensatz-ID für die zuletzt eingefügte Zeile in einer Datenbanktabelle erhalten. Ich versuche zu verwenden db_last_insert_id(), aber es löst eine Ausnahme aus.

Aufruf einer undefinierten Funktion db_last_insert_id()

Wie erhalte ich die zuletzt eingefügte Datensatz-ID?


1
Diese Funktion ist in D7 nicht verfügbar. drupal.org/node/729970
— GoodSp33d

Antworten:


15

In Drupal 6 würden Sie Code ähnlich dem folgenden verwenden.

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

Der entsprechende Drupal 7-Code lautet wie folgt.

$id = db_insert('mytable')
  ->fields(array(
    'intvar' => 5,
    'stringvar' => 'hello world',
    'floatvar' => 3.14,
  ))
  ->execute();

Ich mag neu Datensatz - ID aus einer bestimmten Tabelle aus der db.Actually Ich brauche neu registrierte Benutzer - ID (uid) in Regeln eingeführt , wie ich es acheive kann
— Prashanth

Vergessen Sie nicht, Tabellennamen und Feldnamen infunction db_last_insert_id($table, $field)
— Vladislav

10

Wenn Sie die jeweilige Einfügeabfrage nicht selbst steuern, können Sie immer eine einfache alte SQL-Abfrage verwenden:

$last_id = db_query('SELECT MAX(id_col) FROM {table}')->fetchField();

Ich habe versucht, Max (uid) zu verwenden, aber ich bekomme den Rekord über dem letzten Rekord
— Prashanth

Dann wurde der Datensatz noch nicht eingefügt, sodass keine neue UID verfügbar ist
— Clive

Ich kann den neuen Datensatz in der Datenbank sehen, aber ich
— erhalte

Nein, das ist unmöglich :) Wenn Sie die UID in der Datenbank sehen können, MAX(uid) muss die logische Auswahl diese UID zurückgeben. Wenn nicht, ist Ihr MySQL-Server sehr, sehr kaputt
— Clive

Dies wäre nur möglich, wenn Ihre Funktion unmittelbar vor dem Einfügen des letzten Datensatzes aufgerufen wird.
— Елин Й.

0
  $id = db_insert('mytable')
       ->fields(array(
       'intvar' => 5,
       'stringvar' => 'hello world',
       'floatvar' => 3.14,
       ))
       ->execute();

$ id enthält die zuletzt eingefügte ID der Tabelle. Echo einfach $ id.


0

Wenn Sie aus irgendeinem Grund vor dem Einfügen einen Feldwert abrufen müssen, ist dies eine Problemumgehung.

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

Ein grober Trick, aber es funktioniert:

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('a','b')", array(), array('return' => Database::RETURN_INSERT_ID));

oder

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('%s','%s')", array('a','b'), array('return' => Database::RETURN_INSERT_ID));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.