使用foreach()从php数组值更新sql数据库表

tzdcorbm  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(385)

我正在尝试使用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表也显示了相同的情况。我是错过了什么还是做错了什么?感谢您的反馈/意见,并希望结束它。谢谢您。

j8yoct9x

j8yoct9x1#

您在values数组中执行foreach并传递相同的ip,因此where表示永远要更改相同的元素。
它把剩下的代码,我看到哪里是错误的,我帮助纠正它。
但你得做些这样的事。

$product_qttys = Array ( ["127.0.0.1"] => 1 ["127.0.0.1"] => 4 ["127.0.0.1"] => 2 ["127.0.0.1"] => 3 ["127.0.0.1"] => 6);

foreach ($product_qttys as $key => $pr_qtys){
  $qttys = mysqli_real_escape_string($con, $pr_qtys);

  $sql = "UPDATE table-a SET qty = '$qttys' WHERE ip_add = '$key'";
  $result = mysqli_query($con,$sql);
}

echo "<br/>check SQL table<br/>";           
$sqla = "SELECT * FROM table-a WHERE ip_add='$key'";
$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/>");
    }
}

也要改善逻辑

d8tt03nd

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'"; 将解决问题,但这是没有测试,所以可能无法工作。如果语句正确,则需要将所有数组键作为不同的列。

相关问题