私は現在$mysqli->insert_id
、新しい行が挿入されたときにMySQLテーブルから自動割り当てされた主キーを取得するために使用しています。これは、単一のインサートで正常に機能します。の単純なケースです
$result = $mysqli->query($query);
$NewPrimaryKey = $mysqli->insert_id;
ただし、(実際にはこのサイトから)拡張挿入を使用した方が複数の挿入を行う方がよいことを学びました。
insert into table (name1,name2,name3) values
('blah1','blah2',blah3'),
('blah1','blah2',blah3'),
('blah1','blah2',blah3'))
これもうまく機能します。ただし、どのキーが自動割り当てされたかを知りたい場合を除きます。
PHPマニュアルには次のように書かれています。
AUTO_INCREMENTフィールドを持つテーブルで拡張挿入を実行する場合、mysqli_insert_id()の値は最初に 挿入された行の値と等しくなります。
私のテストはこれを確認しているようです。
注:最初または最後だけは必要ありません。
auto_allocatedキーを個別に取得できるようにするためだけに、何千もの単一挿入に戻す必要はありません。
拡張挿入を実行し、(おそらく配列で)割り当てられたすべてのキーを取り戻す方法を知っている人はいますか?
拡張書き込みを実行する前に、最新の既存のキーを読み取って保持し、割り当てられたキーの期待値を計算することは私には思い浮かびましたが、これは少し厄介なようです。