将数组拆分为mysql php中的单独列

问题描述:

I am really new at php/mysql, so I hope you will bear with me! This code is part of a larger script, but I think it is the crucial parts needed to help me further.

$order_id = $_POST['order_ids'];
$order_ids = implode(",",$order_id);

<input type="text" name="order_ids[]" value="123">
<input type="text" name="order_ids[]" value="456">

$query = "INSERT INTO order_list (id,order_id) VALUES (LAST_INSERT_ID(),'$order_ids')";

I would like to get:

id|order_id
10|123
10|456

Instead of what I get now

id|order_id
10|123, 456

UPDATE

The code from @Ido seems to work out of the box, I have one more field input I would like to add as well to the column which in the table is called "amount" which is similar to the order_id field input.

$order_amount = $_POST['order_amounts_field'];
$order_amounts = implode(",",$order_amount);

I tried copying this and changing with the other one, but soon realized I have to execute both inputs in the same query so as to get them in the same row:

$order_ids = array();

foreach($order_id as $id)
$order_ids[] = "(LAST_INSERT_ID(), '". $id ."')";

$order_ids = implode(", ", $order_ids);

$query = "INSERT INTO order_list (id,order_id) VALUES $order_ids";

$order_ids = array();

foreach($order_id as $id)
    $order_ids[] = "(LAST_INSERT_ID(), '". $id ."')";

$order_ids = implode(", ", $order_ids);

$query = "INSERT INTO order_list (id,order_id) VALUES $order_ids";

You're explicitly combining the IDs into a string and inserting one row so the results make sense.

You need to loop through each ID submitted and attach them to a dynamically built INSERT query:

$query = "INSERT INTO order_list (id,order_id) VALUES ";
foreach ($_POST['order_ids'] as $order_id) {
    $order_id = (int) $order_id; // sanitize numerical value
    $query .= "(LAST_INSERT_ID(), $order_id),";
}
$query = rtrim($sql, ',');

This just illustrates a concept. There are multiple ways to do this. Just be sure you sanitize your data as your sample code is very insecure as it is wide open to SQL injection.

$query = "INSERT INTO order_list (id,order_id) VALUES (LAST_INSERT_ID(),'$order_ids')";

In SQL if you want to insert multiple rows you have to do :

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

See details here

So, in your case :

INSERT INTO order_list (order_id) VALUES (123), (456)

We can avoid increment manually "id" if it's an integer autoincrement and the primary key for this table in your database.

I hope that I have made this clear. Regards