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

I need to insert MySQL data from array values to a single raw. I have tried code below but I am getting error: Warning: implode(): Invalid arguments passed in How can I solve this problem? Or is there any alternative way to insert array values to single raw in MySQL using PHP?

<?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

If you want to post array to database then use php serialize function.It is best for array type data

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

Implode function second parameters accept Array so at first check in implode function the second parameter is array.

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

This line says $product_id is key which is not array so implode function should not work.

Please provide $_POST['qty'] dump

Try this:

<?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')");
}

It is very bad idea to save comma separated values in db.

You could do,

<?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);
}
?>

This should work.

But keeping comma seperated list in a field is not a good thing to do. You could have a new table, so that you can keep a mapping to what products are in what order.

This is not a good idea. - It is a very bad idea.

That being said. Your $product_id is not an array - it is an array key (string or integer) so there is nothing to implode.

Instead of inserting csv into this table it would be a much better idea to insert new row for each id you have.

try this :

<?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);

}
?>