【问题标题】:Custom buffering of php mysql results - strange issuephp mysql结果的自定义缓冲 - 奇怪的问题
【发布时间】: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


【解决方案1】:

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

mysqli_fetch_all($q)

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

mysqli_fetch_all — 以关联数组、数值数组或两者的形式获取所有结果行

【讨论】:

  • 好的,所以我确实用$r=mysqli_fetch_all($q); 替换了我的while 循环,即使您建议的功能有意义,这似乎也不起作用。我开始怀疑php在自己的代码中是否有一些错误。
  • 哦。我正在使用无缓冲的 mysql 查询,我刚刚在 php 网站上阅读:“......另外,mysqli_fetch_all 仅适用于缓冲结果集,这是 mysqli_query 的默认设置......”
  • 对不起,我有点忙,我会尽快找你,见老板
  • @Mike 你还需要这方面的帮助吗?这个答案能解决你的问题吗?如果没有,我会删除它
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多