我发现我的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));
无效的任何想法?或者任何想法如何在不使用额外变量的情况下使其工作?还是我卡住了?
答案 0 :(得分:0)
如果要将所有结果存储在数组中而不是为什么不使用
mysqli_fetch_all($q)
并将结果存储在您想要的任何内容中。虽然如果你想快速访问我 认为缓存听起来更合适。
mysqli_fetch_all
- 将所有结果行作为关联数组,数字数组或两者进行提取