奇怪的PHP数组行为使用所有相同的值覆盖值

时间:2010-04-15 21:38:08

标签: php mysqli

我做了一个简单的mysqli查询,代码已经使用了很多次,但从来没有遇到过这个问题。我正在抓取一个包含未知列数的整个表(它经常更改所以我不知道确切的值,也不知道列名称)。我有一些代码使用元数据来抓取所有内容并将其粘贴在一个数组中。

一切正常,但输出搞砸了:

$stmt -> execute();  //the query is legit, no problems there
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field())
{
    $params[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);

while ($stmt->fetch())
{
    $pvalues[++$i] = $row; //$pvalues is an array of arrays. row is an array
    //print_r($row);
    print_r($pvalues[$i-1]);
}
$stmt -> close();

我认为$ pvalues有我想要的结果。我的表目前有2行。 $ pvalues的数组长度为2. $ pvalues中的两行完全相同。如果我使用:

print_r($row)

它打印出两行的正确值,但如果稍后我检查$ pvalues中的内容是不正确的($ pvalues的两个索引都分配了1行)。

如果我使用

print_r($pvalues[$i-1])

它完全按照我的预期打印,表格中的同一行两次。

为什么不将数据分配给$ pvalues?我知道$ row在某一点上保存了正确的信息,但它被覆盖或丢失了。

1 个答案:

答案 0 :(得分:0)

不应该是

while ($row = $stmt->fetch())