SQL PHP如何基于另一个表的主键更新外键?
我环顾四周,尝试了一些解决方案,但由于某种原因,这是行不通的。我有一个用于即将发行的相册的表,它的主键是albums\u id,自动递增。在即将推出的“唱片集曲目”表中,每当我创建新唱片集时,我希望其唱片集id更新为与唱片集id中的值相同 下面是我的php类文件中的方法SQL PHP如何基于另一个表的主键更新外键?,php,sql,key,match,Php,Sql,Key,Match,我环顾四周,尝试了一些解决方案,但由于某种原因,这是行不通的。我有一个用于即将发行的相册的表,它的主键是albums\u id,自动递增。在即将推出的“唱片集曲目”表中,每当我创建新唱片集时,我希望其唱片集id更新为与唱片集id中的值相同 下面是我的php类文件中的方法 public function create ($title, $content, $date, $price){ $db = Dbclass::getDB(); $query = "INSERT INTO upcoming
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();
}
创建相册工作正常,但是即将到来的相册曲目表的相册id不会从NULL更改为它应该的值
这是这个问题的一个视觉效果
即将推出的专辑表:
即将推出的专辑曲目表(我需要专辑id相同,不为空)
更新这是我处理插入轨迹的方法。请注意,每个相册都有多个曲目,因此首先调用我的create方法,然后为插入的每个曲目运行以下方法。现在的问题是根本没有插入任何内容:
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);
看看这个您需要的是获取插入的最后一条记录的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";
试试这个
$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";
插入记录时,基本上需要获取上次插入记录的ID并使用它进行更新。插入记录时,基本上需要获取上次插入记录的ID并使用它进行更新。尝试了以下方法:$conn=new-PDO(“mysql:host=localhost;dbname=muzy”,“root”,“”)$相册id=mysqli\u插入id($conn)$query=“插入即将发行的专辑曲目(专辑id)值(“.$albums\u id”)”;出现此错误:mysqli_insert_id()期望参数1为mysqli,给定的对象为:$conn=new-PDO(“mysql:host=localhost;dbname=muzy”,“root”,”)$相册id=mysqli\u插入id($conn)$query=“插入即将发行的专辑曲目(专辑id)值(“.$albums\u id”)”;出现此错误:mysqli_insert_id()希望参数1为mysqli,请参阅问题的更新部分。我采纳了你的建议,但现在没有在tracks表中创建任何内容。忘记了逗号,哦!!我选择你作为最佳答案。其他答案都很好,但是我很感激你给了我这个问题的具体答案,而不是引用一个例子。请参阅我问题的更新部分。我采纳了你的建议,但现在没有在tracks表中创建任何内容。忘记了逗号,哦!!我选择你作为最佳答案。其他答案都很好,但我很感激你给了我一个具体问题的具体答案,而不是引用一个例子。