gpt4 book ai didi

php - PDO将最后一个插入id插入到两个表中

转载 作者:行者123 更新时间:2023-11-29 10:28:41 25 4
gpt4 key购买 nike

我试图将相同的 insertId 插入到几个链接表中,但是我发现在执行第一个方法后,插入 id 显然会重置为零。这些方法是独立的,因为它们可以在其他地方重用。他们在不同的类(class)。

本质上调用了三个进程,但我主要关心这两个更新,其中一个更新抵消了另一个更新。

if($resource->createResource()){

$author->resourceAuthor();
$subject->resourceSubject();

}

这两种方法本质上是相同的。每个表都将数据插入到单独的链接表中(多对多)。

第一个是这样的:

function resourceAuthor()
{

$query = "INSERT INTO authors_has_resource (resource_id, author_id) VALUES (?,?)";

$last_id = $this->conn->lastInsertId();

$stmt = $this->conn->prepare($query);


if(!empty($this->id)) {
foreach($_POST['author_id'] as $id) {


$stmt->execute(array(
$last_id,
$id
));
}
}
}

第二个是这样的:

function resourceSubject()
{

$query = "INSERT INTO resource_has_subjects (resource_id, subject_id) VALUES (?,?)";

$last_id = $this->conn->lastInsertId();

$stmt = $this->conn->prepare($query);


if(!empty($this->id)) {
foreach($_POST['subject_id'] as $id) {


$stmt->execute(array(
$last_id,
$id
));
}
}
}

我第一个运行的哪个运行正常,但第二个运行时只是将resource_id输入为0(其他行,即各自表中的author_id或subject_id运行良好,但当然它们最终会出现重复的键,当然 0 不是主键,至少在本例中是这样)

有没有一种简单的方法可以解决这个问题?我尝试在初始脚本中将插入 id 创建为变量,但似乎没有效果。

编辑

我尝试过这样的事情:

if($resource->createResource()){

$last_id = $db->lastInsertId();
print_r($last_id);
$resource->resourceSubjectAuthor($last_id);


}

然后创建一个新方法

function resourceSubjectAuthor($last_id)
{

$query = "INSERT INTO authors_has_resource (resource_id, author_id) VALUES (?,?)";


$stmt = $this->conn->prepare($query);


$query2 = "INSERT INTO resource_has_subjects (resource_id, subject_id) VALUES (?,?)";


$stmt2 = $this->conn->prepare($query2);
if(!empty($this->id)) {
foreach($_POST['author_id'] as $id) {


$stmt->execute(array(
$last_id,
$id
));
}

foreach($_POST['subject_id'] as $ids) {


$stmt2->execute(array(
$last_id,
$ids
));
}
}


}

最后一个 id 已正确创建,但没有执行任何操作

最佳答案

好的,我成功解决了这个问题。该问题与执行一次后重置插入 ID 直接相关。我只需要在调用这两个方法之前定义插入 id,然后在执行之前将该变量传递给方法。

if($resource->createResource()){

$last_id = $db->lastInsertId();
$author->resourceAuthor($last_id);
$subject->resourceSubject($last_id);
}

然后在这两种方法中,只需传递变量而不是像这样声明它:

function resourceSubject($last_id)
{

$query = "INSERT INTO resource_has_subjects (resource_id, subject_id) VALUES (?,?)";


$stmt = $this->conn->prepare($query);


if(!empty($this->id)) {
foreach($_POST['subject_id'] as $id) {


$stmt->execute(array(
$last_id,
$id
));
}
}
}

同样:

function resourceAuthor($last_id)
{

$query = "INSERT INTO authors_has_resource (resource_id, author_id) VALUES (?,?)";
$stmt = $this->conn->prepare($query);


if(!empty($this->id)) {
foreach($_POST['author_id'] as $id) {


$stmt->execute(array(
$last_id,
$id
));
}
}
}

关于php - PDO将最后一个插入id插入到两个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47836965/

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