jul*_*lio 23 php mysql mysql-insert-id
我已经使用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();
Run Code Online (Sandbox Code Playgroud)
INSERT上的$ my_id是正确的,但是当它更新一行时(ON DUPLICATE KEY UPDATE)不正确.
我看过几篇帖子,人们建议你使用类似的东西
INSERT INTO table (a) VALUES (0) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)
Run Code Online (Sandbox Code Playgroud)
在调用ON DUPLICATE KEY时获取有效的ID值 - 但这会将该有效ID返回给PHP mysql_insert_id()函数吗?
jul*_*lio 36
这是亚历山大建议的答案:
当你使用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();
Run Code Online (Sandbox Code Playgroud)
无论更新还是插入,这都将为$ my_id返回正确的值.
edo*_*ian 10
您可以检查Query是插入还是更新(mysql_affected_rows();在插入时返回1,在更新时返回2).
如果是插入使用mysql_insert_id,如果是更新,则需要另一个Query.
<?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 ...
}
?>
Run Code Online (Sandbox Code Playgroud)
我知道你所寻找的并不是很令人兴奋,但这是我能想到的最好的