将整个mysql结果集转储到数组中的最有效方法是什么?

时间:2013-06-25 21:01:57

标签: php mysql set

我试图将整个结果集放入一个数组中,如下所示:

while($myres[]=$result->fetch_array(MYSQLI_ASSOC));

这样可以正常但如果我在结果中有5行返回,则数组有6个索引,最后一个为null。所以我的数组似乎总是一个索引太大了。

我可以使用num_rows来循环结果,但这需要我设置我自己的计数器并递增它,我喜欢上面我的行的速记效率,但是如何阻止它用空集填充最后一个索引。

这是我使用fetch_all的替代方法,我发现需要一个特殊的驱动程序,并非所有的php服务器都已安装。

2 个答案:

答案 0 :(得分:1)

我只会使用多行

$myres = array();
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $myres[] = $row;

但是,如果你拥有而没有额外的数组赋值行

while ($row = $result->fetch_array(MYSQLI_ASSOC) && $myres[] = $row) {

但这或多或少相同。

答案 1 :(得分:0)

表达式

while($myres[]=$result->fetch_array(MYSQLI_ASSOC));

执行以下操作:

  1. 执行$result->fetch_array(MYSQLI_ASSOC)
  2. 将此表达式的结果分配给$myres[],从而将条目附加到$myres数组
  3. $result->fetch_array(MYSQLI_ASSOC)的结果作为条件传递给while语句,并确定是否应该退出循环。
  4. 请注意,在确定是否应退出$myres循环之前,向while数组附加一个条目。这是你的额外行来自的地方。

    通过经典的方式,你不会失去任何效率:

    while ($record = $result->fetch_array(MYSQLI_ASSOC)) {
     $myres[] = $record; 
    }