You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多对多关系场景下 如何用PHP将多选分类插入电影关联表

实现方案

1. 调整前端多选控件配置

多选控件的name属性需要添加[]后缀,才能让PHP接收所有选中的分类ID数组,修改后的代码如下:

<div class="col-12 col-md-6">
        <div class="form-group">
            <label for="genre">Categories*</label>
            <div class="inner-addon right-addon">
                <i class="glyphicon fas fa-theater-masks"></i>
                <select class="selectpicker" name="data[genId][]" type="number" id="genId"
                        placeholder="Choose categories..." required multiple aria-label="Categories">
                    <option value="1">Action</option>
                    <option value="2">Comedy</option>
                    <option value="3">Drama</option>
                    <option value="4">Fantasy</option>
                    <option value="5">Horror</option>
                    <option value="6">Mystery</option>
                    <option value="7">Romance</option>
                    <option value="8">Sci-Fi</option>
                    <option value="9">Thriller</option>
                </select>
            </div>
        </div>
    </div>

2. 修改后端PHP处理逻辑

在电影数据插入完成后,先获取新插入记录的movId,再遍历选中的分类ID插入关联表即可,修改后的完整PHP代码如下:

<?php
require "settings/init.php";

if (!empty($_POST["data"])) {
    $data = $_POST["data"];
    $file = $_FILES;

    if (!empty($file["movImg"]["tmp_name"])){
        move_uploaded_file($file["movImg"]["tmp_name"], "uploads/" . basename($file["movImg"]["name"]));
    }

    // 插入电影基础数据
    $sql = "INSERT INTO movie (movName, movDesc, movRelDate, movRating, movActors, movProducers, movType, movReview, movImg) VALUES (:movName, :movDesc, :movRelDate, :movRating, :movActors, :movProducers, :movType, :movReview, :movImg)";
    $bind = [
        ":movName" => $data["movName"],
        ":movDesc" => $data["movDesc"],
        ":movRelDate" => $data["movRelDate"],
        ":movRating" => $data["movRating"],
        ":movActors" => $data["movActors"],
        ":movProducers" => $data["movProducers"],
        ":movType" => $data["movType"],
        ":movReview" => $data["movReview"],
        ":movImg" => (!empty($file["movImg"]["tmp_name"])) ? $file["movImg"]["name"] : NULL,
    ];
    $db->sql($sql, $bind, false);

    // 新增:获取刚插入的电影ID
    $movId = $db->lastInsertId();
    
    // 新增:处理多选分类插入关联表
    if (!empty($data['genId']) && is_array($data['genId'])) {
        foreach ($data['genId'] as $genId) {
            $relSql = "INSERT INTO genreconmovie (movId, genId) VALUES (:movId, :genId)";
            $relBind = [
                ':movId' => $movId,
                ':genId' => $genId
            ];
            $db->sql($relSql, $relBind, false);
        }
    }

    echo include 'includes/success.php';
    exit;
}
?>

注:如果你的数据库封装类获取自增ID的方法不是lastInsertId(),请替换为对应类提供的获取最后插入ID的方法即可。

内容的提问来源于stack exchange,提问作者helpless123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:24:05