mysqli :: insert_id在重复键上返回错误的id

时间:2011-09-14 13:34:31

标签: php mysql-insert-id on-duplicate-key

当在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)!!

有什么想法吗?

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。

希望有所帮助。

相关问题