LAST_INSERT_ID无法处理UPDATE

时间:2013-08-30 10:37:30

标签: php sql last-insert-id

如果我使用这个SQL:

UPDATE formulare SET EV_id=59, EV_status=5 WHERE EV_id=57 AND ID_uziv=12;SELECT LAST_INSERT_ID();

我将0作为最后一个插入ID。 我正在使用php mysqli_insert_id,据说:

The mysqli_insert_id() function returns the ID generated by a query 
on a table with a column having the AUTO_INCREMENT attribute. 
If the last query wasn't an INSERT or UPDATE statement 
or if the modified table does not have a column with the AUTO_INCREMENT attribute, 
this function will return zero. 

我的表formualreauto increment列,所以我不知道问题是什么

3 个答案:

答案 0 :(得分:6)

如果没有新的自动增量值,

LAST_INSERT_ID()将无效。

解决方案是这样的:

UPDATE formulare SET EV_id=LAST_INSERT_ID(59), EV_status=5 WHERE EV_id=57 AND ID_uziv=12;SELECT LAST_INSERT_ID();

注意:我猜,EV_id是auto_increment主键。

否则你应该进行如下查询:

UPDATE formulare SET key_col = LAST_INSERT_ID(key_col), EV_id=59, EV_status=5 WHERE EV_id=57 AND ID_uziv=12;SELECT LAST_INSERT_ID();

答案 1 :(得分:2)

来自the documentation

  

上一次查询为AUTO_INCREMENT列生成的ID   成功,如果上一个查询没有生成AUTO_INCREMENT,则 0   值,如果没有建立MySQL连接则为FALSE。

由于您的更新未创建新记录,因此未生成任何AUTO_INCREMENT值。

答案 2 :(得分:1)

UPDATE查询更新现有记录,它不会返回任何新ID。

mysqli_insert_id retrieves the ID generated for an AUTO_INCREMENT column by the        
previous query (usually INSERT).

没有INSERT查询,这就是原因,在执行UPDATE查询后你不会得到任何ID。

有关详细信息,请参阅mysql_insert_id