当在PHP中使用mysqli :: insert_id进行INSERT INTO ON DUPLICATE KEY UPDATE时,如果行更新,我会继续获得下一个自动增量而不是更新的行。在同一个数据库中,但在另一个表中,我在使用ON DUPLICATE KEY UPDATE时没有这种行为。相反,我得到更新行的ID。但是由于某种原因,在我创建的新表中,我不断获得下一个甚至不存在的id。两个表都是MyISAM,并且有一个自动增量字段。我不明白他们为什么表现不同。
示例:
==================================
Table: example
==================================
id | unique_field | data
==================================
1 | unique1 | 123
2 | unique2 | 456
INSERT INTO
example
SET
unique_field = 'unique1',
data = '321'
ON DUPLICATE KEY UPDATE
data = '321'
// mysqli::insert_id returns 3 (not 1)!!
有什么想法吗?
答案 0 :(得分:1)
来自mysql manual:
如果表包含AUTO_INCREMENT列并且INSERT ... UPDATE 插入一行,LAST_INSERT_ID()函数返回 AUTO_INCREMENT值。如果语句更新了一行, LAST_INSERT_ID()没有意义。但是,你可以解决这个问题 通过使用LAST_INSERT_ID(expr)。假设id是AUTO_INCREMENT 柱。要使LAST_INSERT_ID()对更新有意义,请插入行 如下:
INSERT INTO表(a,b,c)VALUES(1,2,3)在DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id),c = 3;使用时会忽略DELAYED选项 在DUPLICATE KEY UPDATE。
希望有所帮助。