此代码在我的本地RoR / Windows 7(64位)上运行:
sql = ActiveRecord::Base.connection()
last_pk = sql.insert("insert into manual (name) values ('hello new value')")
puts 'last_pk=', last_pk
但始终显示“0”。
由于各种原因,我无法在这种情况下使用ActiveRecord。
(注意:上面的代码在我的共享主机上运行正常。 另请注意:我必须在StackOverflow.com上将mysql5 \ bin \ libmySQL.dll替换为另一个不同的DLL,以便使任何数据库连接正常工作。)
答案 0 :(得分:1)
将您的代码更改为使用insert_sql
而不是insert
,即
last_pk = sql.insert_sql("insert into manual (name) values ('hello new value')")
puts "last_pk=#{last_pk}"
insert_sql
调用应该返回主键。这是insert_sql
中mysql_adapter.rb
的代码。
def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
super sql, name
id_value || @connection.insert_id
end
答案 1 :(得分:1)
如果有疑问,请从mysql获取:
SELECT LAST_INSERT_ID()
将返回用于插入的最后一个id。如果进行多线程处理,请确保在同步块中锁定两个语句。