我通过mysqli prepared语句从数据库中获取多行。这发生在一个单独的函数中,它应该返回一个数组,而数组的每个键都将包含一个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] =&gt; 2 [名称] =&gt;罗伯特......)
返回阵列:数组([0] =&gt;数组([employee_ID] =&gt; 2 [名称] =&gt; 罗伯特......))
前进2
ROW:数组数组([employee_ID] =&gt; 3 [name] =&gt; john ...)
返回阵列:数组([0] =&gt;数组([employee_ID] =&gt; 3 [名称] =&gt; 约翰......)[1] =&gt;数组([employee_ID] =&gt; 3 [名称] =&gt;约翰......))
所以即使$ row完全保留了我想要的次数,并且我将它作为新索引推送到数组中,它实际上会用$ row覆盖所有现有索引/索引。
为什么不单独留下现有指数?
答案 0 :(得分:4)
对mysqli_stmt::fetch manual page的评论解决了这个问题: “问题是返回的$行是引用而不是数据。因此,当你编写$ array [] = $ row时,$ array将填充数据集的最后一个元素。” 那里也有另一种解决方案。
// loop through all result rows
while ($stmt->fetch()) {
foreach( $row as $key=>$value )
{
$row_tmb[ $key ] = $value;
}
$array[] = $row_tmb;
}