답변:
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();
function db_last_insert_id($table, $field)
특정 삽입 쿼리를 직접 제어하지 않으면 항상 일반 SQL 쿼리를 사용할 수 있습니다.
$last_id = db_query('SELECT MAX(id_col) FROM {table}')->fetchField();
MAX(uid)
를 반환 해야합니다 . MySQL 서버가 매우 손상되지 않은 경우
어떤 이유로 든 삽입하기 전에 필드 값을 가져와야하는 경우이를 해결하는 방법입니다.
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');
조잡한 트릭이지만 작동합니다.
$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));