我正在公司网站上运行股票更新,查询如下;
$count = count($stock);
for($i = 0; $i < $count; $i++)
{
if(strtolower($stock[$i]['stockloc']) == 'retail')
{
if($stock[$i]['avail'] < 0)
{
$stock[$i]['avail'] = 0;
}
mysql_query("UPDATE `xcart_products`
SET `avail` = ".$stock[$i]['avail']."
WHERE `productid` IN
(SELECT `productid`
FROM `xcart_extra_field_values`
WHERE `productid` = ".$stock[$i]['productid']."
AND `fieldid` = 5
AND LOWER(value) = 'retail')");
}
}
实际上,它在for循环中运行并遍历数千种产品,更新库存水平。它运行正常大约4分钟,然后事情开始落后于我们的网站,mysql似乎积压与其他网站数据库查询,它无法运行(它们都显示为锁定),这导致不可避免;
内部服务器错误服务器遇到内部错误或 配置错误,无法完成您的请求。
请联系服务器管理员以告知时间 发生错误以及您可能已经做过的任何事情 导致错误。
有关此错误的详细信息可能在服务器错误中可用 日志中。
似乎没有超时我已经提升了PHP.ini的限制无济于事。查询并不是特别复杂,但它确实运行了数千次。也许多达5000+。我不确定问题是什么,因为我们在旧网站上运行了类似的更新系统,虽然它不是我设计的,但上传这么多库存数量变化并没有问题。
如果需要进一步的信息,我会很乐意扩展我的问题,但老实说,即使如何追查问题,我也有点不知所措。
$ stock数组是一个关联数组,具有以下格式;
Array ( [0] => Array ( [avail] => 55 [productid] => 17761 [sku] => AER-TOUCH-2100 [stockloc] => retail ) [1] => Array ( [avail] => 166 [productid] => 22653 [sku] => CAS-AER-112 [stockloc] => retail ) [2] => Array ( [avail] => 272 [productid] => 22952 [sku] => CAS-ANT-001 [stockloc] => retail ) [3] => Array ( [avail] => 5 [productid] => 22956 [sku] => CAS-ANT-005 [stockloc] => retail ) [4] => Array ( [avail] => 12 [productid] => 22958 [sku] => CAS-ANT-007 [stockloc] => retail
我已尝试在循环的每x次迭代中运行延迟,但我仍然收到500内部服务器错误消息。显然,我需要一个更好的解决方案来更新我的表。