从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类