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

时间:2015-11-18 05:43:18

标签: 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;}
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));无效的任何想法?或者任何想法如何在不使用额外变量的情况下使其工作?还是我卡住了?

1 个答案:

答案 0 :(得分:0)

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

mysqli_fetch_all($q)

并将结果存储在您想要的任何内容中。虽然如果你想快速访问我  认为缓存听起来更合适。

  

mysqli_fetch_all - 将所有结果行作为关联数组,数字数组或两者进行提取