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


Custom buffering of php mysql results - strange issue

我在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[row number][field name]的形式检索。

现在,当我更改代码时,它是这样的:

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_array($q));为什么不起作用吗?或者有什么想法可以让它在不使用额外变量的情况下工作?还是我被卡住了?

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

mysqli_fetch_all($q)

并将结果存储在您想要的任何位置。不过如果你想快速访问我认为缓存听起来更合适。

mysqli_fetch_all—将所有结果行作为关联数组、数字数组或同时作为获取