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?

Prashanth
quelle
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();
4Leben
quelle
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();
Clive
quelle
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.

Krish
quelle
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');
Rick
quelle
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));
Angus Walker
quelle