下面的代码是我用来更新mySQL数据库的php文件的一部分。
我可以在FF Firebug控制台中看到POST数据在POST到这个php文件的形式中都是正确的。
问题是如果$i
大于3,我会收到以下错误:
连接已重置
页面加载时重置了与服务器的连接。“
这表明我必须编写自定义的php.ini吗?如果是这样,我需要增加什么值?
我意识到我的循环mysql_query
代码也可能不正确,但它确实适用于{1}}值为1到3.如果是这样的话,有人会建议正确的编码吗?
$i
感谢您提供的任何帮助。
答案 0 :(得分:0)
错误文本The connection to the server was reset while the page was loading.
告诉我错误是在您的Web服务器和客户端(浏览器)之间,而不是在Web服务器和数据库之间。
您是否查看了数据库并查看记录是否已正确更新?
尽可能的解决方案:
max_execution_time
max_input_time
此外,InnoDB存储引擎可能会对您有所帮助,因为它具有行级锁定功能,可能会降低数据库级别的执行速度。
另外,查看apache的错误日志,看看是否还有其他错误。
答案 1 :(得分:0)
这更多的是个人品味,而不是真正的性能问题,但GetSQLValueString()(对于那些想知道,它是Macromedia DW的自定义函数,当使用Dreamweaver的数据库帮助时生成。在这个SO question它显示和解释)有时是“太多”,简单的mysql_real_escape_string()或检查值是INT就足够了。
此外,我将连接和选择数据库放在循环之外。另外,但通常不需要它,你可以在每次传递后释放mysql结果:
// connect to DB here.
mysql_select_db($database_HDAdave, $HDAdave);
for ($i=1; $i<=$rr_years; $i++){
$idrr = intval($_POST['id' . $i]);
$associated_horse = intval($_POST['associated_horse' . $i]);
$year = mysql_real_escape_string($_POST['year' . $i]);
$age = intval($_POST['age' . $i]);
$starts = intval($_POST['starts' . $i]);
$first = intval($_POST['first' . $i]);
$first_sw = intval($_POST['first_sw' . $i]);
$second = intval($_POST['second' . $i]);
$second_sp = intval($_POST['second_sp' . $i]);
$third = intval($_POST['third' . $i]);
$third_sp = intval($_POST['third_sp' . $i]);
$age_notes = mysql_real_escape_string($_POST['age_notes' . $i]);
$age_text = mysql_real_escape_string($_POST['age_text' . $i]);
$earned = mysql_real_escape_string($_POST['earned' . $i]);
mysql_query("UPDATE `race_records` SET
`associated_horse` = $associated_horse,
`year` = '$year',
`age` = $age,
`starts` = $starts,
`first` = $first,
`first_sw` = $first_sw,
`second` = $second,
`second_sp` = $second_sp,
`third` = $third,
`third_sp` = $third_sp,
`age_notes` = '$age_notes',
`age_text` = '$age_text',
`earned` = '$earned'
WHERE `rr_id` = $idrr", $HDAdave) or die(mysql_error());
// not needed:
mysql_free_result($HDAdave);
}
?>