插入前检查是否有重复

时间:2012-08-08 07:59:34

标签: php sql insert duplicate-removal

问题

我有一个表tbl_student_courses加入2个表studentcourses现在,当插入数据时,它是2个ID course_idstudent_id的组合。我只是想在tbl_student_courses中没有重复此组合。

代码

foreach($_POST['sel_course'] as $val) {

$query_std_course = "
  INSERT INTO
    `tbl_student_courses`
  SET
    `course_id` = '".$val."',
    `std_id` = '".$_POST['std']."',
  WHERE NOT EXISTS (
    SELECT * FROM `tbl_student_courses` WHERE course_id=$val AND std_id=$std
  )";

}

帮助

此查询给出SQL语法错误。

任何人都可以帮助我吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

可能你缺少一个内部查询值的引号。 您SQL查询应该如下所示

$sql = "
  INSERT INTO
    `tbl_student_courses`
  SET
    `course_id` = '".$val."',
    `std_id` = '".$_POST['std']."',
  WHERE NOT EXISTS (
    SELECT * FROM `tbl_student_courses` WHERE course_id='".$val."' AND std_id='".$std."'
  )";

注意:在数据库中插入未准备好的语句std_id = '".$_POST['std']."'这样的语句不是很好。请考虑自己使用PDO filter 数据。这可以很容易地用于SQL Iinjection,因此可能存在安全漏洞。

更新:尝试使用ON DUPLICATE KEY UPDATEINSERT IGNORE INTO table

您可以找到有关您的实施的更多信息 - http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html

阅读有关建议实施的内容 - http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

答案 1 :(得分:0)

您寻求的SQL语法是MERGE语句,或其在您平台上的等效语句

http://en.wikipedia.org/wiki/Merge_(SQL