【发布时间】:2016-02-19 17:59:09
【问题描述】:
我发现我的 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)); 不起作用吗?或任何想法如何在不使用额外变量的情况下使其工作?还是我被卡住了?
【问题讨论】:
-
我认为这样做没有意义 while($r[]=mysqli_fetch_array($q));
-
我的程序将结果存储在一个多维数组中,以便以后快速访问。我需要一个循环来收集所有数据。
标签: php arrays loops memory mysqli