프로젝트에 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 DELETE CASCADE를 참조하십시오.
C 및 D는 동일한 FK 시트를 갖는다. 참조 CASCADE ON DELETE CASCADE에 관한 설명은 생략한다.
E에는 FK sysNum이 있습니다. CASCADE ON DELETE CASCADE를 참조하십시오.
$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에 삽입 한 후 다음
I는 데이터 양이 표에 삽입 될 하바 그래서 transaction.Here을 chosed 나의 PHP 코드 , sheetNum은 A의 같은 방법으로 10입니다. 그래서 C와 D의 sheetNum은 모두 10입니다. 그러나 E의 sysNum은 10이 아니라 20입니다.
참고 :이 5 개의 테이블은 잘 작동합니다. A. foreign_key_checks = 0으로 설정하고 A에 새 열을 추가 한 다음 foreign_key_checks = 1을 다시 설정합니다. 그러나 불행히도 E 테이블 작업은 실패합니다.
나는 그것에 대해 잘 모릅니다. 누가 나를 도울 수 있습니까?
나는 $ id = $ conn-> insert_id를 시도했습니다. E (sysNum, ...) 값 ($ id, ...)에 삽입; 하지만 $ id는 null입니다 – stack
테이블 A에 삽입 한 직후에 이것을 넣었습니까? 배치해야 할 위치에 대한 답변을 업데이트했습니다. –
PDO의 경우 A에 삽입 한 후'lastInsertId()'를 사용해야합니다. –