簡體   English   中英

PDO將最后一個插入ID插入兩個表

[英]PDO inserting last insert id into two tables

我試圖將相同的insertId插入幾個鏈接表中,但是我發現執行第一個方法后,顯然將插入id重置為零。 這些方法在其他地方重復使用時是分開的。 它們在不同的類中。

基本上有三個過程被調用,但是我主要關注這兩個更新,其中一個取消另一個。

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
            ));
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM