MySQL服务器已经走了 - Zend
问题描述:
我有很奇怪的问题。我正在开发基于zend框架的商店。我正在与一些拍卖服务(allegro.pl)建立整合。我需要通过肥皂下载所有项目。我的功能完成后,我得到“MySQL服务器已经消失”。MySQL服务器已经走了 - Zend
这里是我的代码:
private function getProducts()
{
$items = [];
$filterOptions = /* doesn't matter for this question */;
$allegroItems = $this->allegro->getCore()->doGetItemsList(0, 1, $filterOptions, 3, null);
$itemsCount = $allegroItems->itemsCount;
$perPage = 1000;
$maxPage = ceil(round($itemsCount, 0)/$perPage);
for ($i = 0; $i < $maxPage; $i++) {
$allegroItems = $this->allegro->getCore()->doGetItemsList($perPage * $i, $perPage, $filterOptions, 3, null)->itemsList->item;
if (!is_array($allegroItems)) {
$allegroItems = [$allegroItems];
}
foreach ($allegroItems as $item) {
$items[(string)$item->itemId] = $item;
}
}
return $items;
}
有〜3000个项目,目前。当我下载超过2500-3000件物品时(我没有计算确切数量),我收到错误信息。无论我是否将$ perPage设置为1,100或1000.它不取决于执行时间 - 我可以设置睡眠(100)并下载1000个没有错误的产品。在这个函数的最后一行之前,我可以调用任何没有问题的数据库查询,但是当框架的内置函数尝试更新任务表时,我会得到错误。不是执行时间(时间约为30秒,它与睡眠(100)一起工作正常),而不是内存限制(我可以在每个循环中取消设置变量或将内存限制设置为1GB,没有帮助),而不是执行时间的肥皂功能(下载2000个项目一个接一个地工作正常,虽然它需要几分钟)。而对我来说最奇怪的是,db查询正好在我说的最后一行之前在那个函数内部工作。
我没有使用明确的zend框架,而是基于zend的“shoper”。
任何想法?
答
问题出在BLOB数据上。增加max_allowed_packet解决了它。但是我不知道该BLOB中的内容以及我的函数如何影响它,因为我将它编写为完全独立的函数:-)
是否有办法关闭与mysql的当前连接(在此操作期间)当你需要时打开它?也看看这个:https://dev.mysql.com/doc/refman/5.7/en/gone-away.html – Andreas