php mysql结果的自定义缓冲-奇怪的问题

php mysql结果的自定义缓冲-奇怪的问题,php,arrays,loops,memory,mysqli,Php,Arrays,Loops,Memory,Mysqli,我发现我的PHP代码和mysqli函数有些奇怪。当我的代码采用以下格式时: function mainline(){ $q=mysqli_query($this->conn,"select * from table",MYSQLI_USE_RESULT); $dataset=parse($q); } function parse($q){ if (!$q){return NULL;} while($res=mysqli_fetch_array($q)){$r[]=$res;} mysql

我发现我的PHP代码和mysqli函数有些奇怪。当我的代码采用以下格式时:

function mainline(){
$q=mysqli_query($this->conn,"select * from table",MYSQLI_USE_RESULT);
$dataset=parse($q);
}

function parse($q){
if (!$q){return NULL;}
while($res=mysqli_fetch_array($q)){$r[]=$res;}
mysqli_free_result($q);$q=NULL;$res=NULL;return $r;
}
我能够检索数据并对其进行处理。在上面的示例中,数据返回到
$dataset
,每个元素都以
$dataset[行号][字段名]
的形式检索

现在,当我更改代码时,如下所示:

function mainline(){
$q=mysqli_query($this->conn,"select * from table",MYSQLI_USE_RESULT);
$dataset=parse($q);
}

function parse($q){
if (!$q){return NULL;}
while($r[]=mysqli_fetch_array($q)); // I made change here
mysqli_free_result($q);$q=NULL;return $r;
}
即使select语句完全相同并且始终返回行,返回的数据始终为空。在这两个测试期间,没有任何内容修改数据库中的数据

那么我的问题是为什么
while($res=mysqli_fetch_array($q)){$r[]=$res;}
检索正确的结果和
while($r[]=mysqli_fetch_array($q))没有

对于第二个while循环,我不必分配额外的变量,我正试图减少系统内存的使用,这样我就可以在我的系统上运行更多的apache进程,而不是在PHP上不必要地浪费内存


你知道为什么
while($r[]=mysqli_fetch_数组($q))不起作用?或者有什么想法可以让它在不使用额外变量的情况下工作?还是我被卡住了?

如果要将所有结果存储在数组中,为什么不使用

mysqli_fetch_all($q)
并将结果存储在您想要的任何内容中。不过如果你想快速访问我 我认为缓存听起来更合适

-将所有结果行作为关联数组、数字数组或两者都获取


我认为在($r[]=mysqli_fetch_数组($q))时这样做没有意义;我的程序将结果存储在多维数组中,以便以后快速访问。我需要一个循环来收集所有数据,即使您建议的函数有意义,这似乎也不起作用。我开始怀疑php自己的代码中是否有一些bug。我使用的是无缓冲的mysql查询,我刚刚在php网站上读到:“……此外,mysqli_fetch_all仅适用于缓冲结果集,这是mysqli_查询的默认结果集……”抱歉,我有点忙,我很快会联系您,与boss@Mike你还需要帮助吗?这个答案能解决你的问题吗?如果不能,我会删除它