循环“mysql_query”仅适用于少量循环?

时间:2011-12-22 06:17:20

标签: php mysql

下面的代码是我用来更新mySQL数据库的php文件的一部分。

我可以在FF Firebug控制台中看到POST数据在POST到这个php文件的形式中都是正确的。

问题是如果$i大于3,我会收到以下错误:

  

连接已重置
  页面加载时重置了与服务器的连接。“

这表明我必须编写自定义的php.ini吗?如果是这样,我需要增加什么值?

我意识到我的循环mysql_query代码也可能不正确,但它确实适用于{1}}值为1到3.如果是这样的话,有人会建议正确的编码吗?

$i

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

错误文本The connection to the server was reset while the page was loading.告诉我错误是在您的Web服务器和客户端(浏览器)之间,而不是在Web服务器和数据库之间。

您是否查看了数据库并查看记录是否已正确更新?

尽可能的解决方案:

此外,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);
        }
?>