PHP MySQLi 获取“数组推送”覆盖数据
Posted
技术标签:
【中文标题】PHP MySQLi 获取“数组推送”覆盖数据【英文标题】:PHP MySQLi fetch "array push" overrides data 【发布时间】:2015-12-16 18:03:27 【问题描述】:我有 2 个数组:
$arr = [];
$tempArray = [
'val1' => "xxx",
'val2' => 0,
'val3' => 0
];
然后在我的 mysql 查询中,我用当前行中的值填充临时数组,最后将他推入 $arr:
$stmt->bind_result($tempArray["val1"], $tempArray["val2"], $tempArray["val3"]);
while ( $stmt->fetch () )
array_push($arr, $tempArray);
问题是,在每个循环中,“array_push”都会覆盖$arr
中的数据。
例如我在$stmt->fetch()
中循环了3次。
1.循环
$tempArray = [
'val1' => "Hello",
'val2' => 1,
'val3' => 2
]
$arr = [
0 = [
'val1' => "Hello",
'val2' => 1,
'val3' => 2
];
]
2。循环
$tempArray = [
'val1' => "Stack",
'val2' => 3,
'val3' => 4
]
$arr = [
0 = [
'val1' => "Stack",
'val2' => 3,
'val3' => 4
],
1 = [
'val1' => "Stack",
'val2' => 3,
'val3' => 4
];
]
3.循环
$tempArray = [
'val1' => "Overflow",
'val2' => 5,
'val3' => 6
]
$arr = [
0 = [
'val1' => "Overflow",
'val2' => 5,
'val3' => 6
],
1 = [
'val1' => "Overflow",
'val2' => 5,
'val3' => 6
],
2 = [
'val1' => "Overflow",
'val2' => 5,
'val3' => 6
]
]
我以前从未见过这种行为,也不知道为什么会这样。
最后我想要的是:
$arr = [
0 = [
'val1' => "Hello",
'val2' => 1,
'val3' => 2
],
1 = [
'val1' => "Stack",
'val2' => 3,
'val3' => 4
],
2 = [
'val1' => "Overflow",
'val2' => 5,
'val3' => 6
]
]
$stmt 类(从@Stevish 请求)
$query = "...";
if ( $stmt = $this->db->prepare($query))
$stmt->bind_param('i', $xxx);
$stmt->execute();
$stmt->store_result();
$$stmt->bind_result($tempArray["val1"], $tempArray["val2"], $tempArray["val3"]);
while ( $stmt->fetch () )
$arr[] = $tempArr;
【问题讨论】:
这能回答你的问题吗? bind_result into an array php mysqli prepared statement 【参考方案1】:问题是您正在将对 $tempArray 的引用插入到 $arr 中。然后更改参考。通过第三个循环,您有 3 个对同一数组的引用。这就是为什么值以这种方式显示的原因......您可以用一种相当不直观的方式解决这个问题。
尝试:
$stmt->bind_result($tempArray["val1"], $tempArray["val2"],$tempArray["val3"]);
while ( $stmt->fetch () )
$x = $tempArray; //This copies the values of $tempArray to $x and each loop will create a new x.
array_push($arr, $x);
【讨论】:
这永远行不通。它不能解决引用问题。【参考方案2】:试试:
while ( $stmt->fetch () )
$arr[] = $tempArray;
变量后面的[]
只是让PHP 知道您正在向数组中添加一个新条目。它将根据您的需要被赋予一个数值 (0, 1, 2)。
【讨论】:
与以前相同的行为,数据被覆盖。 啊,我明白了。我认为这是在您的 $stmt->fetch() 函数中发生的。你能发布 $stmt 类的代码吗? 刚刚查看了手册页,发现您的代码和我的代码完全相同,我的只是开销较低 我已经在上面的问题中添加了我的课程:) 对不起,伙计。这超出了我的知识范围。我不确定如何处理所有这些绑定、执行和存储。我以前没有使用过这些命令。我使用完全不同的方法以上是关于PHP MySQLi 获取“数组推送”覆盖数据的主要内容,如果未能解决你的问题,请参考以下文章