回答:
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));