获取mysql_insert_id() 时使用 ON DUPLICATE KEY UPDATE WITH PHP

2022-08-30 16:03:56

我已经找到了一些单独的mySQL答案,但我希望有人可以向我展示一种方法,以便在使用PHP处理插入/更新时获取mysql DB的最后插入或更新行的ID。

目前我有这样的东西,其中列3是唯一键,还有一个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 上是正确的,但在更新行时不正确(在重复键更新时)。

我看过几个帖子,有人建议你使用类似的东西

INSERT INTO table (a) VALUES (0) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id) 

在调用 ON DUPLICATE 键时获取有效的 ID 值 - 但这会将该有效 ID 返回给 PHP 函数吗?mysql_insert_id()


答案 1

正如亚历山大所建议的那样,答案如下:

当您使用id=LAST_INSERT_ID(id)时,它会设置mysql_insert_id =更新后的ID的值 - 因此您的最终代码应如下所示:

<?
    $query = mysql_query("
        INSERT INTO table (column1, column2, column3) 
        VALUES (value1, value2, value3) 
        ON DUPLICATE KEY UPDATE
            column1 = value1, 
            column2 = value2, 
            column3 = value3, 
            id=LAST_INSERT_ID(id)
    ");
    $my_id = mysql_insert_id();

这将返回$my_id 的正确值,而不管是更新还是插入。


答案 2

您可以检查查询是插入还是更新(mysql_affected_rows();在插入时返回 1,在更新时返回 2)。

如果是插入使用mysql_insert_id,如果是更新,则需要另一个查询。

<?php
$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);
if(mysql_affected_rows() == 1) { $id = mysql_insert_id(); }
else { // select ... 
}
?>

我知道这不是你想要的,但这是我能想到的最好的


推荐