INSERT INTO ON DUPLICATE KEY UPDATE のために PHP で mysqli::insert_id を使用すると、行が更新されると、更新された行ではなく、次の自動インクリメントを取得し続けます。同じデータベースの別のテーブルでは、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)!!
何か案は?