一尘不染

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

mysql

我已经找到了单独使用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上是正确的,但是在更新行时(在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()函数吗?


阅读 456

收藏
2020-05-17

共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返回正确的值。

2020-05-17