php中的mysql_insert_id(),不返回最后一个插入ID?

时间:2013-09-17 11:10:02

标签: php mysql

这是我的Mysql查询。在我的表中,Id是自动增量类型。

$sql ="INSERT INTO product_detail (master_detail_id,Product_code,Product_label) 
values
('8330','TOTAL','products'),('8330','010290','demo'),('8330','010639','Live demo'),
('8330','020900','demo fat'),('8330','030344','demos')";

 $insertDetails = mysql_query( $sql);
echo "last insert id-->".mysql_insert_id();

我正在最后一次插入ID ---> 1 但我应该 5 。我不知道为什么会这样?

表格结构

     id            bigint(250)  No  None    AUTO_INCREMENT  
Product_code       varchar(20)  latin1_swedish_ci       No  
Product_label      varchar(500) latin1_swedish_ci       No  
master_detail_id   bigint(250)          No  None    

5 个答案:

答案 0 :(得分:4)

对于多行INSERT语句,mysql_insert_id()返回第一个自动生成的AUTO_INCREMENT值;如果没有生成这样的值,它将返回插入AUTO_INCREMENT列的最后一个显式值。

答案 1 :(得分:2)

如果您将id列指定为AUTO_INCREMENT,则

mysql_insert_id()将返回id。 您应该知道,如果您的id列是BIGINT类型的结果,哪个函数返回可能是错误的(这也在php docs中指定:http://php.net/manual/en/function.mysql-insert-id.php

答案 2 :(得分:1)

对于多插入,mysql_insert_id()返回第一个,你需要做5个单独的查询,最后运行mysql_insert_id(),或者做另外1个查询

SELECT MAX(master_detail_id) FROM product_detail or 
SELECT master_detail_id FROM product_detail 
ORDER BY master_detail_id DESC LIMIT 1

答案 3 :(得分:0)

它只返回插入的第一个项目的ID,而且根据docs,不推荐使用mysql_insert_id()从5.5.0开始。

考虑使用mysqli_insert_id()代替

要解决此问题,您可以尝试使用LAST_INSERT_ID() Mysql函数

引用文档:

Performing an INSERT or UPDATE statement using the LAST_INSERT_ID() function will also modify the value returned by the mysqli_insert_id() function.

使用它的一种简单方法是在插入数据后选择最后一个id 可能这是错误的,如果有人可以指出正确的方法吗?

$sql ="INSERT INTO product_detail (master_detail_id,Product_code,Product_label) 
values
('8330','TOTAL','products'),('8330','010290','demo'),('8330','010639','Live demo'),
('8330','020900','demo fat'),('8330','030344','demos') select LAST_INSERT_ID() from `product_detail`";

重要

请注意,如果最后一次插入失败,LAST_INSERT_ID()将是未定义的,因此您需要添加一个支票!

答案 4 :(得分:0)

由于您正在截断表格,因此自动增量值将重置为1。因此,无论何时运行查询并询问最后插入的ID,它都将返回1