Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL获取数据时PHP内存不足_Php_Mysql - Fatal编程技术网

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

从MySQL获取数据时PHP内存不足,php,mysql,Php,Mysql,我有这个剧本: 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

我有这个剧本:

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_数组。每次迭代时,内存的使用都在增加,所以如果我迭代成千上万的用户,就会出现问题。为什么$t中的单个用户在while的单次迭代后没有发布?

根据PHP手册,关于:

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

当时支持mysql,所以建议的解决方案是使用:mysql\u unbuffered\u query,这不再重要了


因此,如果您只是在检索数据,另一种解决方案是使用:与

结合使用,我们可以看到在private$dbWrapper中实例化的类;请我们还能看到类用户吗?@Scoots我添加了DB类