繁体   English   中英

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

[英]mysql_insert_id() in php , not return last insert id?

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

对于多行INSERT语句,mysql_insert_id()返回第一个自动生成的AUTO_INCREMENT值。 如果未生成任何此类值,则它将返回插入到AUTO_INCREMENT列中的最后一个显式值。

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

对于多次插入,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

它将仅返回插入的第一项的ID,并且从docs起5.5.0版本不推荐使用mysql_insert_id()。

考虑使用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()将是未定义的,因此您需要添加检查!

由于您要截断表,因此自动递增值将重置为1 因此,每当您运行查询并询问最后插入的ID时,它将返回1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM