我在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
—将所有结果行作为关联数组、数字数组或同时作为获取