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

问题描述:

这是我的MySQL错误。如何解决SQLSTATE [23000]:完整性约束违规:1062重复条目?

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

我使用了它并阅读了一些关于它的内容,但是我不明白。

如何解决?

这是主要的一块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是我总是用它来代替mysql中的mysql_connection函数,但我不知道它到底是什么。我知道在那里使用一种叫做“PDO”的东西。

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

顺便说一句,你的函数容易受到SQL注入攻击,你应该在将它包含在一个SQL查询中之前总是转义你的数据。

+0

我发现问题了!谢谢! +我听说php5防止sql注入,但是怎么能在这里注入一些“坏”东西?(我使用isset来获得更好的结果)只有一个人'if($ _SESSION ['adm'] === true)'有权访问此页面。那么风险是什么? – 2012-07-05 17:42:59

+2

这还是很不好的做法;如果有人在你的管理区域中断,他也可以在你的SQL服务器上运行任何东西。 – arnaud576875 2012-07-05 17:47:51

+2

由于addStudent.php易受CSRF攻击,所以每个人都可以欺骗自己的浏览器,以任何他想要的参数调用脚本。不需要'adm'= true。 – arnaud576875 2012-07-05 17:49:53