Answers:
在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)
必须返回该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));