我正在尝试使用foreach()从php数组更新sql表。我注意到只有最后一个数组值被写入所有表字段。我看了很多例子,但没有一个能给我解答。例如(从php数组和其他一些数组简单更新sql表)这里是数组$product\u qttys: Array ( [qty0] => 1 [qty1] => 4 [qty2] => 2 [qty3] => 3 [qty4] => 6 )
代码如下:
foreach ($product_qttys as $key => $pr_qtys){
$qttys = mysqli_real_escape_string($con, $pr_qtys);
// print_r ($qttys);
$sql = "UPDATE table-a SET qty = '$qttys' WHERE ip_add = '$ip'";
$result = mysqli_query($con,$sql);
}
echo "<br/>check SQL table<br/>";
$sqla = "SELECT * FROM table-a WHERE ip_add='$ip'";
$querya = mysqli_query($con,$sqla);
if (mysqli_num_rows($querya) > 0) {
while ($producta = mysqli_fetch_assoc($querya)) {
echo ("item_qty=" . ($item_qty = $producta ['qty']) . "<br/>");
}
}
这是我得到的结果:
check SQL table
item_qty=6
item_qty=6
item_qty=6
item_qty=6
item_qty=6
phpmyadmin表也显示了相同的情况。我是错过了什么还是做错了什么?感谢您的反馈/意见,并希望结束它。谢谢您。
2条答案
按热度按时间j8yoct9x1#
您在values数组中执行foreach并传递相同的ip,因此where表示永远要更改相同的元素。
它把剩下的代码,我看到哪里是错误的,我帮助纠正它。
但你得做些这样的事。
也要改善逻辑
d8tt03nd2#
您将'qty'列设置为不同的数字5次,因此当第一个循环通过时,它将'qty'列设置为1,然后在向前移动时,它将把最后一个数字重写为新的数字。不能在同一列和行中保存不同的数字,因此如果
$ip = 127.0.0.1
然后重写ip行中包含127.0.0.1的所有行。可能是这样的$sql = "UPDATE table-a SET $key = '$qttys' WHERE ip_add = '$ip'";
将解决问题,但这是没有测试,所以可能无法工作。如果语句正确,则需要将所有数组键作为不同的列。