2013-04-07 67 views
1

這裏的表結構錯誤:重複的項目「1」鍵「R_ID」

CREATE TABLE IF NOT EXISTS `result` (
`res_id` int(11) NOT NULL AUTO_INCREMENT, 
`s_id` int(10) NOT NULL, 
`i_id` int(6) NOT NULL, 
`r_status` text NOT NULL, 
`r_score` decimal(6,0) NOT NULL, 
PRIMARY KEY (`res_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; 

我搜索了一個解決方案,並嘗試在不同的場合,從頭開始構建表,刪除和導入回來,檢查索引。正如你所看到的,我已經將id重命名爲res_id,但是當我在瀏覽器上運行它時,錯誤仍然顯示r_id。

如果有所作爲,當id未設置爲自動增量時,彈出相同的錯誤。

下面是我想要插入數據庫的頁面的代碼片段。

//retrieve existing r_id 
$sql_res = "SELECT res_id FROM result ORDER BY res_id DESC LIMIT 1"; 
$query_res = mysql_query($sql_res) or die("MySQL Error: " . mysql_error()); 
$data_res = mysql_fetch_assoc($query_res); 
$resid_count = $data_res['res_id']+1; 
//echo "<br>Result: " . $resid_count; 

// insert result to table 
$sql_result = "INSERT INTO result (res_id, r_score, s_id, i_id) VALUES ('" . $resid_count . "', '" . $correct . "', '" . $id . "', '" . $ins_id . "')"; 
mysql_query($sql_result) or die ("Error: " . mysql_error()); 

編輯:我改變了你的建議代碼。從INSERT中取出res_id。它仍然表示r_id的重複條目。我進行了試驗和錯誤,並創建了另一個具有相同結構的'分數'來替換'結果'。想知道是否相同的表名給它的問題(可以多次運行該頁面導致此問題?)。與分數表相同的結果。

任何幫助將不勝感激。我卡在這裏,不能繼續我的項目。謝謝。

Atikah

+2

如果您的res_id是AUTO_INCREMENT,則無需將其放入您的插入查詢中。它將自動設置 – Svetoslav 2013-04-07 10:42:57

+0

您是否有任何觸發器設置? – 2013-04-07 10:43:08

+0

其中是r_id'??你的意思是res_id? – 2013-04-07 10:45:49

回答

2

由於res_idAUTO_INCREMENT我建議你用這個替換您的插入查詢:

$sql_result = "INSERT INTO result (r_score, s_id, i_id) VALUES ('". $correct . "', '" . $id . "', '" . $ins_id . "')"; 
+0

另外值得一提的是,不推薦使用my_sql。 – christopher 2013-04-11 10:59:48

1

試試這個

$sql_result = "INSERT INTO result (r_score, s_id, i_id) VALUES ('" . $correct . "', '" . $id . "', '" . $ins_id . "')"; 

res_id將沒有你插入

編輯自動插入。

如果你只想插入,那麼你不需要這些行,只需刪除它們,因爲你正在使用它們來知道最後的res_id。因爲res_id正如我在auto_increment之前所說的那樣。它會自動增加

$sql_res = "SELECT res_id FROM result ORDER BY res_id DESC LIMIT 1"; 
    $query_res = mysql_query($sql_res) or die("MySQL Error: " . mysql_error()); 
    $data_res = mysql_fetch_assoc($query_res); 
    $resid_count = $data_res['res_id']+1; 
0

確保在您使用NUMERICS你不使用撇號在您的SQL(INT )。這可能會造成麻煩。並且res_id根本不應該涉及到,因爲這是帶有自動增量列的點(您沒有使用PHP代碼搜索數據庫中的下一個ID,DB處理該問題)

您的代碼可能是翻譯成兩行:

$sql_result = "INSERT INTO result (r_score, s_id, i_id) VALUES (" . $correct . ", " . $id . ", " . $ins_id . ")"; 
mysql_query($sql_result) or die ("Error: " . mysql_error()); 

OR(引號內的變量給出了實際值)

$sql_result = "INSERT INTO result (r_score, s_id, i_id) VALUES ($correct, $id, $ins_id)"; 
mysql_query($sql_result) or die ("Error: " . mysql_error()); 

,當然還有 - 不使用mysql_ * - 的功能,因爲他們是不推薦使用。使用PDO或Mysqli代替參數,以便您可以安全地避免SQL注入。你得到的代碼很容易被SQL注入。

+0

這是導致錯誤的索引。我用r_id刪除了一個,現在INSERT工作正常。我看着錯誤的地方。謝謝所有:) – 2013-04-09 16:02:26

相關問題