1

我正在通过 mysqli 准备好的语句从数据库中获取多行。这发生在一个单独的函数中,它应该返回一个数组,而数组的每个键都将保存一个 assoc。具有一个 DB 行的数组。有道理,对吧?

所以我到了这一点:

mysqli_stmt_bind_result($stmt,$row['employee_ID'],$row['name'],...);

$returnedarray = array();

while (mysqli_stmt_fetch($stmt))
{
    $returnedarray[] = $row;
}

期望我将每一行推入返回的数组中。

但是一旦数组被返回 - 如果结果集中有 5 行,它将保持最后一行 5 次......

所以我尝试了这个:

$counter = 1;
while (mysqli_stmt_fetch($stmt))
{
    echo '<br><b>GOING '. $counter++ .'</b><br>';

    echo '<br>ROW: ';
    print_r($row);
    echo '<br>';

    $returnedarray[] = $row;

    echo '<br>RETURNED ARRAY: ';
    print_r($returnedarray);
}

将回显的内容看起来有点像这样:

去 1

行:数组([employee_ID] => 2 [name] => robert ...)

返回数组:数组([0] => 数组([employee_ID] => 2 [name] => robert ...))

去 2

行:数组数组([employee_ID] => 3 [name] => john ...)

返回数组:数组 ( [0] => 数组 ( [employee_ID] => 3 [name] => john ... ) [1] => 数组 ( [employee_ID] => 3 [name] => john ... ) )

因此,即使 $row 每次都包含我想要的内容,并且我将它作为新索引推送到数组中,它实际上会用 $row 覆盖所有现有索引/索引。

为什么它不单独留下现有的索引?

4

1 回答 1

4

mysqli_stmt::fetch 手册页上的评论解决了这个问题:“问题是返回的 $row 是引用而不是数据。因此,当您编写 $array[] = $row 时,$array 将被填充数据集的最后一个元素。” 那里也有替代解决方案。

// loop through all result rows
while ($stmt->fetch()) {

    foreach( $row as $key=>$value )
    {
        $row_tmb[ $key ] = $value;
    }
    $array[] = $row_tmb;

}
于 2013-06-11T22:15:45.357 回答