私のプロジェクトには5つのテーブル(A、B、C、D、E)があります。外部キーを使用中にLAST_INSERT_ID()が変更されました
テーブルのPK sysNumは、int(255)NOT NULL AUTO_INCREMENTです。
Bには、int(255)NOT NULL AUTO_INCREMENTのPK sheetNumがあります。また、BにはFK sysNumがあります。CASCADE ON CASCADEのON DELETE CASCADEを参照してください。
CとDは、同じFKシートを持っています。参考文献CASCADE ON DELETE CASCADEにはありません。
EにはFK sysNumがあります。関連項目CASCADE ON DELETE CASCADEについて
I HAVA多くのデータがこれらのテーブルに挿入されるので、私はtransaction.Hereは私のPHPコードですchosed:Aに挿入した後
$conn->beginTransaction();
......
$query="insert into A() VALUES();";
$stmt=$conn->query($query);
$stmt->closeCursor();
$query="insert into B (...,sysNum) VALUES(...,LAST_INSERT_ID());
insert into C (...,sheetNum) VALUES(...,LAST_INSERT_ID());
insert into D (...,sheetNum) VALUES(...,LAST_INSERT_ID());";
$stmt=$conn->query($query);
$stmt->closeCursor();
for($i=5;$i<$eRN;$i++)
{
......
$query="insert into C (...,sheetNum) VALUES (...,LAST_INSERT_ID());";
$stmt=$conn->query($query);
$stmt->closeCursor();
}
for($i=1;$i<$dRN;$i++)
{
......
$query="insert into D (...,sheetNum) VALUES (...,LAST_INSERT_ID());";
$stmt=$conn->query($query);
$stmt->closeCursor();
}
...
$query="insert into E (sysNum,...) VALUES (LAST_INSERT_ID(),...);";
$stmt=$conn->query($query);
$stmt->closeCursor();
$query="insert into E (sysNum,...) values (LAST_INSERT_ID(),...);";
$stmt=$conn->query($query);
$stmt->closeCursor();
$conn->commit();
、AUTO_INCREMENTによって作成されたsysNumが20で、挿入後にBにsheetNumはAの同じ方法で10です。したがって、CとDのsheetNumは両方とも10です。ただし、EのsysNumは20でなく10です。
注:これらの5つのテーブルは、私はforeign_key_checks = 0を設定し、Aに新しい列を追加しました。そして、foreign_key_checks = 1を元に戻しましたが、残念ながらEテーブルは失敗します。
私はそれについて考えていない、誰が私を助けることができますか?
私は$ id = $ conn-> insert_idを試しました。 E(sysNum、...)の値($ id、...)に挿入します。 $ id is null – stack
テーブルAに挿入した直後にこれを挿入しましたか?それが置かれるべき位置で答えが更新されました。 –
PDOの場合、代わりに 'lastInsertId()'を使用する必要があります。 –