Php mysql don';不要把复制品贴到桌子上

Php mysql don';不要把复制品贴到桌子上,php,mysql,Php,Mysql,所以我有一个数据库,里面有一张电影表,里面有他们各自的导演。 我有一个表单,可以将导演添加到电影中,但我不希望添加重复的导演(即,有人将导演添加到电影导演表中已经存在的电影中) 我有以下几点,但就我个人而言,我不明白为什么这仍然会增加重复项: if (isset($_POST["submit"])) { $movie_id = $_POST[movie]; $director_id = $_POST[director]; echo $movie_id; echo

所以我有一个数据库,里面有一张电影表,里面有他们各自的导演。 我有一个表单,可以将导演添加到电影中,但我不希望添加重复的导演(即,有人将导演添加到电影导演表中已经存在的电影中)

我有以下几点,但就我个人而言,我不明白为什么这仍然会增加重复项:

if (isset($_POST["submit"])) {
    $movie_id = $_POST[movie];
    $director_id = $_POST[director];
    echo $movie_id;
    echo '<br/>';
    echo $director_id;
    echo '<br/>';


    $add_sql = "INSERT IGNORE INTO MovieDirector (mid, did)
                VALUES ($movie_id, $director_id)";

    if (mysql_query($add_sql, $db_connection)){
        echo "added director to movie ";
    } 
    else { 
        echo "Failed "; 
    }
if(设置($\u POST[“提交”])){
$movie\u id=$\u POST[movie];
$director\u id=$\u POST[director];
echo$movie_id;
回声“
”; echo$director\u id; 回声“
”; $add_sql=“将忽略插入MovieDirector(mid,did) 值($movie_id,$director_id)”; if(mysql\u查询($add\u sql,$db\u connection)){ echo“将导演添加到电影中”; } 否则{ echo“失败”; }
我认为您对MySQL中的
插入
语句的
忽略
修饰符关键字的作用感到困惑。
忽略
的作用不是防止重复记录的发生,而是使错误保持沉默

因此,有多种方法可以实现这一点:

  • 您可以修改模式以不允许重复记录,或者继续使用
    IGNORE
    关键字,或者更好地处理错误

    altertablemoviedirector添加唯一索引(mid,did);

  • 如果记录已经存在,也可以修改查询以不插入记录

    IF NOT EXISTS(SELECT * FROM MovieDirector WHERE mid = $movieId AND did = $directorId)
    INSERT INTO MovieDirector (mid, did) VALUES ($movieId, $directorId)
    
  • 你可能想要以上两个(可能减去
    IGNORE
    关键字..这会在以后咬到你)


    如果我没有强调您应该真正使用参数化查询,而不是将变量直接添加到查询字符串中,那么这个答案将是不完整的!

    如果我们没有强调停止,这个答案的可能副本也将是不完整的。使用。
    mysql.*
    !!它已经被弃用了一段时间,并且彻底删除PHP7中的ved。说真的,文档中有一个解释。