这是表结构
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
答案 0 :(得分:2)
由于res_id
为AUTO_INCREMENT
,我建议您替换插入查询:
$sql_result = "INSERT INTO result (r_score, s_id, i_id) VALUES ('". $correct . "', '" . $id . "', '" . $ins_id . "')";
答案 1 :(得分:1)
试试这个
$sql_result = "INSERT INTO result ( r_score, s_id, i_id) VALUES ( '" . $correct . "', '" . $id . "', '" . $ins_id . "')";
res_id
将自动插入,无需插入
EDIT。
如果您只想插入,那么您不需要这些线条,只需删除它们,因为您正在使用它们来了解最后一个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;
答案 2 :(得分: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());
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注入。