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

Mil*_*d R 4 php mysql

这是我的 MySQL 错误。

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 2
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索并阅读了一些关于它的内容,但我无法理解。

如何解决?

这是主要部分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"]);
}
Run Code Online (Sandbox Code Playgroud)

这是以下内容的一部分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);
}
Run Code Online (Sandbox Code Playgroud)

并且 t_student 有一个字段作为primary键,它是自动递增的。

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

Arn*_*anc 5

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

顺便说一句,您的函数容易受到 SQL 注入的影响,您应该始终在将数据包含在 SQL 查询中之前对其进行转义。

  • 这仍然是非常糟糕的做法;如果有人闯入您的管理区域,他也可以在您的 SQL 服务器上运行任何内容。 (4认同)
  • 由于 addStudent.php 容易受到 CSRF 的攻击,每个人都可以欺骗您自己的浏览器,使用他想要的任何参数调用脚本。不需要'adm'=true。 (3认同)