如何解决SQLSTATE [23000]:完整性约束违规:1062重复条目?

时间:2012-07-05 17:26:36

标签: php mysql

这是我的MySQL错误。

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 2

我用Google搜索并阅读有关它的内容,我无法理解。

如何解决?

这是addStudent.php的主要内容:

require_once('../db.php');
$db = new DB();
if (isset($_POST['st_fname']) && isset($_POST['st_lname']) && isset($_POST['st_class']) && isset($_POST['st_grade']))
{
    $db->addStudent($_POST["st_fname"], $_POST["st_lname"], $_POST["st_class"], $_POST["st_grade"], $_POST["checkOlamp"]);
}

这是db.php的一部分:

public function addStudent($fname, $lname, $classnum, $grade, $olamp)
{
    $query = "INSERT INTO t_student (s_fname, s_lname, s_class, s_grade, s_olamp) VALUES('$fname', '$lname', '$classnum', '$grade', '$olamp');";
    $this->execute($query);
}

并且t_student的归档为primary,这是自动增量。

  • db.php是我总是使用它而不是php中的mysql_connection函数,但我不知道究竟是什么。我知道在那里使用了一种叫做“PDO”的东西。

2 个答案:

答案 0 :(得分:4)

这意味着表中某些列的值必须是唯一的,并且您尝试插入重复的行。

BTW,你的函数容易受到SQL注入攻击,你应该在将数据包含在SQL查询中之前总是将其转义。

答案 1 :(得分:0)

解决“ SQLSTATE [23000]:违反完整性约束:1062复制条目”的另一种简便方法是在如下形式的输入字段中传递值: 您可以在占位符之前看到价值... 注意:articles是数据库表名

<div class="form-group">
      <label for="exampleInputTitle">Title</label>
      <input type="title" name="title" class="form-control" id="exampleInputTitle" 
      aria-describedby="emailHelp" 
      value="<?php echo $articles->title;?>"placeholder="Enter title">
      <small id="titleHelp" class="form-text text-muted"></small>
    </div>