1

これは私のMysqlクエリです。私のテーブルでは、ID はAuto-Incrementタイプです。

$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    
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() は最初のものを返します。最後に mysql_insert_id() を実行して 5 つの個別のクエリを実行するか、追加のクエリを 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

挿入された最初のアイテムの ID のみを返します。また、mysql_insert_id() はdocsに従って 5.5.0 で廃止されました。

代わりにmysqli_insert_id() の使用を検討してください

この動作を回避するには、LAST_INSERT_ID()Mysql Functionを使用してみてください。

ドキュメントの引用:

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 に答える