gpt4 book ai didi

php - 使用外键时 LAST_INSERT_ID() 被更改

转载 作者:行者123 更新时间:2023-11-29 06:54:46 24 4
gpt4 key购买 nike

我的项目中有 5 个表(A、B、C、D、E)。

表的 PK sysNum 为 int(255) NOT NULL AUTO_INCRMENT。

B 的 PKsheetNum 为 int(255) NOT NULL AUTO_INCRMENT,并且 B 具有 FK sysNum REFERENCES A ON DELETE CASCADE ON UPDATE CASCADE。

C 和 D 具有相同的 FKsheetNum REFERENCES B ON DELETE CASCADE ON UPDATE CASCADE。

E 具有 FK sysNum REFERENCES A ON DELETE CASCADE ON UPDATE CASCADE。

我有很多数据要插入到这些表中,所以我选择了事务。这是我的 PHP 代码:

  $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();

插入A后,auto_increment创建的sysNum为20。插入B后,与A相同,sheetNum为10。所以C和D的sheetNum都是10。但E的sysNum是10 ,不是 20。

注意:在我向 A 添加列之前,这 5 个表工作正常。我设置了foreign_key_checks=0,并向 A 添加了一个新列。然后设置了foreign_key_checks=1,但不幸的是 E 表工作失败。

我不知道,谁能帮帮我?

最佳答案

以这种方式使用 LAST_INSERT_ID() 时,您将始终从最新 SQL 语句中获取值,这是插入 B 的 key 。
我认为你想要的是最后一个 SQL 语句具有先前语句中的值。当你完成 A 的插入后,你最好存储这个值。你可以使用 (for PDO)

$query="insert into A( ) VALUES ();";
$stmt=$conn->query($query);
$id = Sconn->lastInsertId();

对于 mysqli...

$query="insert into A( ) VALUES ();";
$stmt=$conn->query($query);
$id = Sconn->insert_id;

然后使用该值在表 E 中插入。

关于php - 使用外键时 LAST_INSERT_ID() 被更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com