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”。

任何想法?

+0

是否有办法关闭与mysql的当前连接(在此操作期间)当你需要时打开它?也看看这个:https://dev.mysql.com/doc/refman/5.7/en/gone-away.html – Andreas

问题出在BLOB数据上。增加max_allowed_pa​​cket解决了它。但是我不知道该BLOB中的内容以及我的函数如何影响它,因为我将它编写为完全独立的函数:-)