【发布时间】:2018-10-04 22:48:57
【问题描述】:
我正在尝试使用 foreach() 从 PHP 数组更新 SQL 表。我注意到只有最后一个数组值被写入所有表字段。我在这里看了很多例子,但没有一个能解决我的问题。例如(Simple update sql table from PHP array 和其他一些人)
这是数组 $product_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 表也显示相同。 我错过了什么或做错了什么吗? 感谢您的反馈/输入并希望将其关闭。 谢谢。
【问题讨论】:
-
所以它的工作方式与我通过查看提供的代码所期望的方式一样,即您正在执行 5 次 UPDATE 查询,每一次都使用 $ip 更新所有行,数量,所以当然,在最后一个循环中,所有这些行都变得相同。剩下的问题是您期望发生的事情不是。
-
因此,您有 5 行具有相同的 $ip... 如果您想单独更新它们,您需要使用另一个字段来识别每一行,并将该条件添加到您的更新中。让我们用猫做一个例子(因为每个人都喜欢猫),你去宠物店要他们所有的猫(他们给你 5 只),然后你说“给他们取名吉姆”、“给他们取名弗兰克”、“取名他们 Jules”、“给他们取名 Cat”、“给他们取名 Purr”……最后,他们都被命名为“Purr”。
-
为了更加简化,我删除了条件
WHERE ip_add = "$ip",因此更新语句变为$sql = "UPDATE table-a SET qty = '$qttys'";。将此更新语句移出 foreach() 以运行更新一次,如下所示:foreach ($product_qttys as $key => $pr_qtys){ $qttys = mysqli_real_escape_string($con, $pr_qtys); } $sql = "UPDATE table-a SET qty = '$qttys'"; $result = mysqli_query($con,$sql);。我得到了相同的结果:数组的最后一个值被写入所有表字段。任何解决方案@OctavioGalindo ?你怎么看? -
@JonStirling 你怎么看?请问可以提供一个有效的语法吗?
-
有什么答案吗?卡在这里