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);
试试这个
$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";
我环顾四周并尝试了解决方案,但由于某种原因,这不起作用。我有一个 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);
试试这个
$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";