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 で上書きします。
既存のインデックスをそのままにしておかないのはなぜですか??