1

这是表结构

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的重复条目。我继续进行试验和错误,并创建了另一个具有相同结构的表'score'来替换'result'。想知道相同的表名是否给它带来了问题(多次运行页面会导致这种情况吗?)。与分数表相同的结果。

任何帮助将不胜感激。我被困在这里,无法继续我的项目。谢谢。

阿提卡

4

3 回答 3

2

因为我建议你用这个替换你的插入查询res_idAUTO_INCREMENT

$sql_result = "INSERT INTO result (r_score, s_id, i_id) VALUES ('". $correct . "',  '" . $id . "',  '" . $ins_id . "')";
于 2013-04-07T10:46:33.973 回答
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;
于 2013-04-07T10:44:44.047 回答
0

确保不要在使用数字 (int) 的 SQL 中使用撇号。这可能会引起麻烦。并且 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());

(引号内的变量给出实际值)

$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 注入的攻击。

于 2013-04-07T11:11:33.143 回答