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.