我有一个 PHP 脚本,它运行了一个 MySQL 查询,然后循环遍历结果,在该循环中还运行了多个查询:
$sqlstr = "SELECT * FROM user_pred WHERE uprType != 2 AND uprTurn=$turn ORDER BY uprUserTeamIdFK";
$utmres = mysql_query($sqlstr) or trigger_error($termerror = __FILE__." - ".__LINE__.": ".mysql_error());
while($utmrow = mysql_fetch_array($utmres, MYSQL_ASSOC)) {
// some stuff happens here
// echo memory_get_usage() . " - 1241<br/>\n";
$sqlstr = "UPDATE user_roundscores SET ursUpdDate=NOW(),ursScore=$score WHERE ursUserTeamIdFK=$userteamid";
if(!mysql_query($sqlstr)) {
$err_crit++;
$cLog->WriteLogFile("Failed to UPDATE user_roundscores record for user $userid - teamuserid: $userteamid\n");
echo "Failed to UPDATE user_roundscores record for user $userid - teamuserid: $userteamid<br>\n";
break;
}
unset($sqlstr);
// echo memory_get_usage() . " - 1253<br/>\n";
// some stuff happens here too
}
更新查询永远不会失败。
由于在两个`memory_get_usage`调用之间添加了一些内存,原因未知。由于大循环运行大约500,000次或更多次,在最后它确实会累积大量内存。我在这里漏掉了什么吗?也许内存实际上并没有在两个调用之间添加,而是在脚本的其他位置添加?
编辑:一些额外的信息: 循环之前大约为5mb,在循环之后为约440mb,每个更新查询添加约250字节的内存(其余的内存在循环的其他地方添加)。 我没有发布更多的“其他内容”的原因是因为它约有300行代码。我发布了这部分内容,因为它看起来是添加最多内存的地方。