1

这是我的 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();

我得到了last insert 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    
4

5 回答 5

4

在多行 INSERT 语句的情况下,mysql_insert_id() 返回第一个自动生成的 AUTO_INCREMENT 值;如果没有生成这样的值,则返回插入到 AUTO_INCREMENT 列中的最后一个显式值。

于 2013-09-17T11:14:42.927 回答
2

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

于 2013-09-17T11:12:52.567 回答
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
于 2013-09-17T11:15:02.327 回答
0

由于您正在截断您的表,因此自动增量值将重置为1. 因此,每当您运行查询并询问最后插入的 id 时,它都会返回1

于 2013-09-17T11:48:37.223 回答
0

它只会返回插入的第一个项目的 ID,并且 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()将是未定义的,因此您需要添加一个检查!

于 2013-09-17T11:21:28.957 回答