所以我有一个数据库,里面有各自导演的电影表。 我有一个可以为电影添加导演的表单,但我不想添加重复项(即有人将导演添加到已经在电影导演表中的电影。
我有以下内容,但对于我的生活,我无法弄清楚为什么这仍然会添加副本:
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 ";
}
答案 0 :(得分:0)
我认为您对IGNORE
修饰符关键字对MySQL中INSERT
语句的作用感到困惑。 IGNORE
的作用不是防止重复记录发生,而是使错误无声。
因此,有多种方法可以解决这个问题:
您可以修改架构以禁止重复记录,并继续使用IGNORE
关键字,或者更好地处理错误
ALTER TABLE MovieDirector ADD UNIQUE INDEX(mid, did);
您还可以将查询修改为不插入记录(如果已存在)
IF NOT EXISTS(SELECT * FROM MovieDirector WHERE mid = $movieId AND did = $directorId)
INSERT INTO MovieDirector (mid, did) VALUES ($movieId, $directorId)
您可能想要上述两种情况(可能会减去IGNORE
关键字..以后会发生这种情况并在以后咬你)
如果我没有强调您应该使用参数化查询而不是将变量直接添加到查询字符串中,那么这个答案将是不完整的!