【发布时间】:2010-04-14 00:34:39
【问题描述】:
我已经找到了一些单独使用 mySQL 的答案,但我希望有人可以告诉我一种方法来获取使用 PHP 处理插入/更新时最后插入或更新的 mysql DB 行的 ID .
目前我有这样的东西,其中 column3 是唯一键,还有一个 id 列是自动递增的主键:
$query ="INSERT INTO TABLE (column1, column2, column3) VALUES (value1, value2, value3) ON DUPLICATE KEY UPDATE SET column1=value1, column2=value2, column3=value3";
mysql_query($query);
$my_id = mysql_insert_id();
$my_id 在 INSERT 时正确,但在更新行时不正确(ON DUPLICATE KEY UPDATE)。
我看过一些帖子,有人建议你使用类似的东西
INSERT INTO table (a) VALUES (0) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)
在调用 ON DUPLICATE KEY 时获取有效的 ID 值——但这会将有效的 ID 返回给 PHP mysql_insert_id() 函数吗?
【问题讨论】:
-
我没有答案。但这个解决方案看起来很聪明。你为什么不试试呢?我认为创建一个可以给出明确答案的测试用例应该不难。 PS.:不要误会我的意思;我能理解你想要安慰。我可能也会。但我想我会先尝试一下。 :)
-
我很好奇它是如何工作的,但我在 MySQL 手册中找到了这一点:如果 expr 作为 LAST_INSERT_ID() 的参数给出,则该参数的值由函数返回并且被记住为 LAST_INSERT_ID() 所返回的下一个值。
-
@Alexandre:是的,假设
mysql_insert_id()只是LAST\_INSERT\_ID()的代理,我认为这应该按预期工作。 -
谢谢大家,这是对我有用的方法。你是对的——当你使用 id=LAST_INSERT_ID(id) 时,它会设置 mysql_insert_id 的值 = 更新后的 ID。
标签: php mysql mysql-insert-id