SQL PHP 如何根据另一个 table 的主键更新外键?

SQL PHP How do I update a foreign key based on the primary key of another table?

我环顾四周并尝试了解决方案,但由于某种原因,这不起作用。我有一个 upcoming_albums 的 table,albums_id 作为其主要的自动递增键。在我的 upcoming_albums_tracks table 中,我希望它的 albums_id 更新为与 albums_id 中的值相同,每当我创建新专辑时。

这是我的 php class 文件中的方法

public function create ($title, $content, $date, $price){ 

$db = Dbclass::getDB();
$query = "INSERT INTO upcoming_albums (albums_title, albums_content, albums_date, albums_price, albums_img_path)
            VALUES (:title, :content, :date, :price, :path)";

$statement = $db->prepare($query);
$statement->bindParam(':title', $title, PDO::PARAM_STR, 50);
$statement->bindParam(':content', $content);
$statement->bindParam(':date', $date);
$statement->bindParam(':price', $price, PDO::PARAM_STR, 10);
$statement->bindValue(':path', $this->target_path, PDO::PARAM_STR);

$statement->execute();

$query = "UPDATE upcoming_albums_tracks
            SET albums_id = upcoming_albums.albums_id
            FROM upcoming_albums_tracks
            WHERE upcoming_albums_tracks.albums_title = upcoming_albums.albums_title";

$statement = $db->prepare($query);

$statement->execute();   

}

创建专辑工作正常,但是 upcoming_albums_tracks table 的 albums_id 没有从 NULL 更改为它应该的值。

这是问题的视觉效果。

upcoming_albums table:

upcoming_albums_tracks table(我需要albums_id一样,不是NULL)

UPDATE 这是我处理插入曲目的方法。请注意,每个专辑都有多个曲目,因此首先调用我的创建方法,然后插入每个曲目,我 运行 以下方法。现在的问题是什么都没有插入:

public function createTrack ($title, $track, $index) {

        $db = Dbclass::getDB();
        $lastInsertId = $db->lastInsertId();    

        $query = "INSERT INTO upcoming_albums_tracks (albums_id, albums_title, albums_track, albums_track_path, albums_track_file)
                    VALUES (" . $lastInsertId . " :title, :track, :path, :file_name)";

        $statement = $db->prepare($query);
        $statement->bindParam(':title', $title, PDO::PARAM_STR, 50);
        $statement->bindParam(':track', $track, PDO::PARAM_STR, 50);
        $statement->bindValue(':path', $this->tracks[$index]['target_path'], PDO::PARAM_STR);
        $statement->bindValue(':file_name', $this->tracks[$index]['file_name'], PDO::PARAM_STR);

        $statement->execute();

    }

奇怪的是,如果我尝试回显 $lastInsertId,它会给我正确的编号。

您需要的是获取最后插入的记录的 ID。要在 MySQL 中完成此操作,您可以使用:

 $last_id = mysqli_insert_id($conn);

看看这个enter link description here

试试这个

$lastInsertId = $db->lastInsertId();

$query = "UPDATE upcoming_albums_tracks SET albums_id = $lastInsertId FROM upcoming_albums_tracks WHERE upcoming_albums_tracks.albums_title = upcoming_albums.albums_title";