首页 文章

使用foreach将数组插入到单个MySQL raw中

提问于
浏览
0

我需要将MySQL数据从数组值插入到单个raw中 . 我已经尝试过以下代码,但是我收到错误:警告:implode():传入的参数无效如何解决此问题?或者有没有其他方法在MySQL中使用PHP将数组值插入单个raw?

<?php

foreach ($_POST['qty'] as $product_id => $qty) {
$product_id = implode(" ",$product_id);
$qty = implode(" ",$qty);
}
$q = mysqli_query($conn, "INSERT INTO product_order (product_id,qty) VALUES ('$product_id','$qty')");

?>

enter image description here

6 回答

  • 0

    Implode函数第二个参数接受Array所以首先检查implode函数第二个参数是数组 .

    foreach ($_POST['qty'] as $product_id => $qty)
    

    这一行说 $product_id 是不是数组的键,所以内爆函数不起作用 .

    请提供 $_POST['qty'] 转储

  • 0

    试试这个:

    <?php
     $product = [];
     $qtys = [];
    if(!empty($_POST['qty'])){
    foreach ($_POST['qty'] as $product_id => $qty) {
       array_push($product, $product_id);
       array_push($qtys, $qty);
    }
     $qty_final = implode(',',$qtys);
     $product_id_final = implode(',',$product);
     $q = mysqli_query($conn, "INSERT INTO product_order (product_id,qty) VALUES ('$product_id_final','$qty_final')");
    }
    

    在db中保存逗号分隔值是非常糟糕的 .

  • 0

    This is not a good idea. - 这是一个非常糟糕的主意 .

    话虽如此 . 你的 $product_id 不是一个数组 - 它是一个数组键( stringinteger )所以没有任何内容可以破坏 .

    不是将csv插入到这个表中,而是为每个id插入新行更好 .

  • 0

    试试这个 :

    <?php
    
    $product_data = isset(($_POST['qty'])? ($_POST['qty']: array();
    
    if ( !empty($product_data) ){
    
        $sql = "INSERT INTO product_order (product_id, qty) VALUES ('".implode(", ", array_keys($product_data))."','".implode(", ", array_values($product_data))."')";
    
        $q = mysqli_query($conn, $sql);
    
    }
    ?>
    
  • 0

    如果你想将数组发布到数据库然后使用php serialize函数 . 它最适合数组类型数据

    $serialized_data = serialize(array('Math', 'Language', 'Science'));  
    echo  $serialized_data . '<br>';
    
  • 0

    你可以这样做,

    <?php
    $product_data = isset(($_POST['qty'])? ($_POST['qty']: array();
    if ( !empty($product_data) ){
        $sql = "INSERT INTO product_order (product_id, qty) VALUES ('".implode(", ", array_keys($product_data))."','".implode(", ", array_values($product_data))."')";
        $q = mysqli_query($conn, $sql);
    }
    ?>
    

    这应该工作 .

    但是在字段中保留逗号分隔列表并不是一件好事 . 您可以拥有一个新表,以便您可以保持映射到哪些产品的顺序 .

相关问题