Ich habe 5 Tabellen (A, B, C, D, E) in meinem Projekt.LAST_INSERT_ID() wird geändert, während Fremdschlüssel verwendet wird
Eine Tabelle hat PK sysNum, die int (255) NOT NULL AUTO_INCREMENT ist.
B hat PK-Blattnummer, die int (255) ist NOT NULL AUTO_INCREMENT, und B hat FK sysNum REFERENZEN A ON DELETE CASCADE AUF UPDATE CASCADE.
C und D haben dasselbe FK-BlattNum REFERENZEN B ON DELETE CASCADE AUF UPDATE CASCADE.
E hat FK sysNum REFERENZEN A ON DELETE CASCADE AUF UPDATE CASCADE.
ich viele Daten in diese Tabellen eingefügt werden hava, so chosed i transaction.Here ist mein PHP-Code:
$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();
Nach Einsatz in A, die sysNum von auto_increment erstellt ist 20. Und nach Einsatz in B , die BlattNum ist 10 wie die gleiche Weise von A. So SheetNum von C und D sind beide 10. Aber die sysNum von E ist 10, nicht 20.
Hinweis: diese 5 Tabellen funktionieren gut, bevor ich Spalte hinzugefügt zu A. Ich habe foreign_key_checks = 0 gesetzt und eine neue Spalte zu A hinzugefügt. Und dann foreign_key_checks = 1 zurück gesetzt, aber leider funktionieren E-Tabellen nicht.
Ich habe keine Ahnung, Wer kann mir helfen?
Ich habe versucht $ id = $ conn-> insert_id; Einfügen in E (sysNum, ...) Werte ($ id, ...); aber $ id ist null – stack
Hast du das gleich nach deinem Einfügen in die Tabelle A gelegt? Aktualisierte Antwort mit Position sollte es gestellt werden. –
Für PDO - Sie müssen 'lastInsertId()' statt –