마지막으로 삽입 된 레코드 ID는 어떻게 얻습니까?


9

데이터베이스 테이블에서 마지막으로 삽입 된 행의 레코드 ID를 가져 오려고합니다. 을 사용하려고하는데 db_last_insert_id()예외가 발생했습니다.

정의되지 않은 함수 호출 db_last_insert_id()

마지막으로 삽입 된 레코드 ID는 어떻게 얻습니까?


1
이 기능은 D7에서 사용할 수 없습니다. drupal.org/node/729970
GoodSp33d

답변:


15

Drupal 6에서는 다음과 유사한 코드를 사용합니다.

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

Drupal 7 해당 코드는 다음과 같습니다.

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

db의 특정 테이블에서 새로 삽입 된 레코드 ID를 원합니다. 실제로 어떻게 그것을 달성 할 수 있습니까? 규칙에 새로 등록 된 UserId (uid)가 필요합니다
prashanth

테이블 이름과 필드 이름을 지정하는 것을 잊지 마세요function db_last_insert_id($table, $field)
블라디슬라프

10

특정 삽입 쿼리를 직접 제어하지 않으면 항상 일반 SQL 쿼리를 사용할 수 있습니다.

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

나는 Max (uid) 사용하려고 시도했지만 마지막 레코드보다 높은 레코드를 얻었습니다
prashanth

그러면 레코드가 아직 삽입되지 않았으므로 새로운 uid가 없습니다
Clive

데이터베이스에서 새 레코드를 볼 수 있지만 해당 레코드의 ID를 얻지 못합니다
prashanth

데이터베이스에서 uid를 볼 수 있다면 논리적으로 선택 하면 해당 uid MAX(uid) 반환 해야합니다 . MySQL 서버가 매우 손상되지 않은 경우
Clive

마지막 레코드가 삽입되기 직전에 함수가 호출 된 경우에만 가능합니다.
Елин Й.

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

$ id는 테이블의 마지막으로 삽입 된 id를 포함합니다. 그냥 $ id를 반향하십시오.


0

어떤 이유로 든 삽입하기 전에 필드 값을 가져와야하는 경우이를 해결하는 방법입니다.

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

조잡한 트릭이지만 작동합니다.

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

또는

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('%s','%s')", array('a','b'), array('return' => Database::RETURN_INSERT_ID));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.