2012-07-05 472 views
2

這是我的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」的東西。

回答

4

這意味着表中某列的值必須是唯一的,並且您試圖插入重複行。

順便說一句,你的函數容易受到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

相關問題