Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL PHP如何基于另一个表的主键更新外键?_Php_Sql_Key_Match - Fatal编程技术网

SQL 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

我环顾四周,尝试了一些解决方案,但由于某种原因,这是行不通的。我有一个用于即将发行的相册的表,它的主键是albums\u id,自动递增。在即将推出的“唱片集曲目”表中,每当我创建新唱片集时,我希望其唱片集id更新为与唱片集id中的值相同

下面是我的php类文件中的方法

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表中创建任何内容。忘记了逗号,哦!!我选择你作为最佳答案。其他答案都很好,但我很感激你给了我一个具体问题的具体答案,而不是引用一个例子。