1

mysqli 準備済みステートメントを介して DB から複数の行をフェッチしています。これは、配列を返すはずの別の関数で発生していますが、配列の各キーは assoc を保持します。1 つの 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

ROW: 配列 配列 ( [employee_ID] => 3 [name] => john ... )

返される配列: Array ( [0] => Array ( [employee_ID] => 3 [name] => john ... ) [1] => Array ( [employee_ID] => 3 [name] => john ... ) )

したがって、$row は毎回必要なものを正確に保持し、それを新しいインデックスとして配列にプッシュしても、実際にはすべての既存のインデックス/インデックスを $row で上書きします。

既存のインデックスをそのままにしておかないのはなぜですか??

4

1 に答える 1

4

mysqli_stmt::fetch マニュアル ページのコメントでは、次のように説明されています。データセットの最後の要素です。」そこにも別の解決策があります。

// 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 に答える