这是我的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
答案 0 :(得分:4)
对于多行INSERT语句,mysql_insert_id()返回第一个自动生成的AUTO_INCREMENT值;如果没有生成这样的值,它将返回插入AUTO_INCREMENT列的最后一个显式值。
答案 1 :(得分:2)
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
。