首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MySQL获取数据时PHP内存不足

问从MySQL获取数据时PHP内存不足
EN

Stack Overflow用户
提问于 2017-11-01 17:12:08
回答 1查看 160关注 0票数 1

我有这个脚本:

代码语言:javascript
复制
class DBWrapper 
{
   private $conn;

   public function __construct()
   {
      $this->conn = mysqli_connect(/* LOGIN INFO */);
   }

   public function select($q)
   {
       return new DBQuery($this->conn, $q);
   }
}

class DBQuery 
{
   private $q;
   private $tmp;
   public function __construct($conn, $q)
   {
     $this->tmp = mysqli_query($conn, $q);

   }

   public function getRow()
   {
      return mysqli_fetch_array($this->tmp)
   }
}

class Users
{
   private $tmp;
   private $dbWrapper;

   public function __construct($db)
   {
     $this->dbWrapper = $db;
   }


   public function getRow()
   {
     return $this->tmp->getRow();
   }

   public function Activate()
   {
     $select = " SELECT * FROM  users";                         

     $this->tmp = $this->dbWrapper->select($select);
   }
}

$users = new Users($db);
$users->Activate(); 

while($t = $users->getRow())
{
    echo memory_get_usage().'<br>';
}

DBWrapper类在getRow()中使用mysqli_fetch_array。在while的每一次迭代中,memory_get_usage都在增加,所以如果我遍历大量的用户,它会导致问题。为什么$t中的单个用户在while的单次迭代后没有释放?

EN

回答 1

Stack Overflow用户

发布于 2017-11-01 17:56:01

根据关于Buffered and Unbuffered queries的PHP手册

缓冲模式的缺点是较大的结果集可能需要相当多的内存。内存将一直被占用,直到取消设置对结果集的所有引用或显式释放结果集,这将在请求结束最新时自动发生。术语“存储结果”也用于缓冲模式,因为一次存储整个结果集。

当时支持mysql_*,所以建议的解决方案是使用:mysql_unbuffered_query(),这已经不重要了。

因此,如果您只是检索数据,另一种解决方案是使用:结合使用mysqli::use_result和mysqli_result::free

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47051492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档