2013-04-07 48 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

相关问题