¿Cómo insertar matrices múltiples en una base de datos?

Obtengo algunos datos de un formulario como matrices. Cada valor de $_POST es una matriz en sí misma:

 //Example snippet from my code; I have some more data/arrays $department_name = ($_POST[department_name]); $participant_name = ($_POST[participant_name]); $activity = ($_POST[activity]); $location = ($_POST[location]); 

Ahora sé que podría usar un ciclo foreach para recorrer cada una de estas matrices e insertar los valores uno por uno en mi base de datos:

 foreach($department_name as $department) { $query = "INSERT INTO location_info (`department`) VALUES ('{$department}')"; $result = mysqli_query($connection, $query); } 

Esto parece mucho código para todas mis 35 variables POST así como mucho trabajo para el servidor. Más importante aún, ¿cómo voy a “alinear” cada dato? Debido al bucle crearía una nueva fila dentro de la base de datos en cada iteración y dejaría campos en blanco para todas las otras columnas.

Así que busqué cómo podía recorrer varias matrices a la vez y encontré esta solución:

  $value) { echo $ZZ[$index] . $KK[$index]; echo "
"; } ?>

Pero realmente no entiendo cómo funciona esto y cómo puedo aplicar esto a mi código.

Básicamente, como ejemplo, tengo múltiples matrices como:

 $department_name = array("A", "B", "C"); $participant_name = array(1, 2, 3); 

Y necesito insertarlos en mi base de datos así:

 INSERT INTO location_info (`department`, `participant`) VALUES ('A', 1); INSERT INTO location_info (`department`, `participant`) VALUES ('B', 2); INSERT INTO location_info (`department`, `participant`) VALUES ('C', 3); 

Así que creo que tengo que usar un bucle foreach y recorrer todas las matrices a la vez para insertar los datos fila por fila, pero no veo cómo puedo aplicar el código que encontré arriba a mi código.


Después de algunos comentarios útiles, cambié a PDO e hice algunos progresos.

Mi código actual se ve así.

Conexión:

 getMessage(); } ?> 

Más abajo tengo:

 try { $sql = "INSERT INTO location_info (`department`, `participant`, `activity`, `location`, `rec_injuries`, `rec_injuries_timeframe`, `non_rec_injuries`, `non_rec_injuries_timeframe`, `competitor`, `cost_per_pair`, `usage_rate`, `leakage`, `cost_of_productivity`, `non_rec_impact`, `non_rec_sprain`, `non_rec_puncture`, `non_rec_dermatitis`, `non_rec_infection`, `non_rec_burns`, `non_rec_cuts`, `rec_impact`, `rec_sprain`, `rec_puncture`, `rec_dermatitis`, `rec_infection`, `rec_burns`, `rec_cuts`, `condition`, `general_id`) VALUES (:department, :participant, :activity, :location, :rec_injuries, :rec_injuries_timeframe, :non_rec_injuries_timeframe, :competitor, :cost_per_pair, :usage_rate, :leakage, :cost_of_productivity,:non_rec_impact, :non_rec_sprain, :non_rec_puncture, :non_rec_dermatitis, :non_rec_infection, :non_rec_burns, :non_rec_cuts, :rec_impact, :rec_sprain, :rec_puncture, :rec_dermatitis, :rec_infection, :rec_burns, :rec_cuts, :condition, :general_id)"; $stmt = $db->prepare($sql); for($i = 0, $l = count($_POST["department_name"]); $i  $_POST["department_name"][$i], ':participant' => $_POST["participant_name"][$i], ':activity' => $_POST["activity"][$i], ':location' => $_POST["location"][$i], ':rec_injuries' => $_POST["injuries"][$i], ':rec_injuries_timeframe' => $_POST["injury_time_frame"][$i], ':non_rec_injuries' => $_POST["non_rec_injuries"][$i], ':non_rec_injuries_timeframe' => $_POST["non_rec_injury_timeframe"][$i], ':competitor' => $_POST["competitor"][$i], ':cost_per_pair' => $_POST["cost_per_pair"][$i], ':usage_rate' => $_POST["usage_rate"][$i], ':leakage' => $_POST["leakage"][$i], ':cost_of_productivity' => $_POST["cost_of_productivity"][$i], ':non_rec_impact' => $_POST["non_rec_impact"][$i], ':non_rec_sprain' => $_POST["non_rec_sprain"][$i], ':non_rec_puncture' => $_POST["non_rec_puncture"][$i], ':non_rec_dermatitis' => $_POST["non_rec_dermatitis"][$i], ':non_rec_infection' => $_POST["non_rec_infection"][$i], ':non_rec_burns' => $_POST["non_rec_burns"][$i], ':non_rec_cuts' => $_POST["non_rec_cuts"][$i], ':rec_impact' => $_POST["impact"][$i], ':rec_sprain' => $_POST["sprain"][$i], ':rec_puncture' => $_POST["puncture"][$i], ':rec_dermatitis' => $_POST["dermatitis"][$i], ':rec_infection' => $_POST["infection"][$i], ':rec_burns' => $_POST["burns"][$i], ':rec_cuts' => $_POST["cuts"][$i], ':condition' => $_POST["condition"][$i], ':general_id' => $_POST["id"][$i] ); $stmt->execute($loc_info); } } catch (Exception $e) { $error = $e->getMessage(); } 

Pero esto todavía no está funcionando.

¿Pensamientos? ¿No puedo poner una matriz dentro de una matriz?

Ok después de algunas pruebas y errores y algo de ayuda de @ Rizier123, aquí está la respuesta:

html en la página de formulario

Para mayor claridad, estaba tratando de descubrir cómo agregar varias matrices de datos a mi base de datos. Entonces en la página de formulario dynamic, tengo entradas similares a:

 

Location:

Procesando el formulario e ingresando los datos a la base de datos

Primero, cambié de mysqli a PDO, luego corrí con el siguiente código:

 try { $sql = "INSERT INTO location_info (`department`, `participant`, `activity`, `location`, `rec_injuries`, `rec_injuries_timeframe`, `non_rec_injuries`, `non_rec_injuries_timeframe`, `competitor`, `cost_per_pair`, `usage_rate`, `leakage`, `cost_of_productivity`, `non_rec_impact`, `non_rec_sprain`, `non_rec_puncture`, `non_rec_dermatitis`, `non_rec_infection`, `non_rec_burns`, `non_rec_cuts`, `rec_impact`, `rec_sprain`, `rec_puncture`, `rec_dermatitis`, `rec_infection`, `rec_burns`, `rec_cuts`, `condition`, `general_id`) VALUES (:department, :participant, :activity, :location, :rec_injuries, :rec_injuries_timeframe, :non_rec_injuries, :non_rec_injuries_timeframe, :competitor, :cost_per_pair, :usage_rate, :leakage, :cost_of_productivity,:non_rec_impact, :non_rec_sprain, :non_rec_puncture, :non_rec_dermatitis, :non_rec_infection, :non_rec_burns, :non_rec_cuts, :rec_impact, :rec_sprain, :rec_puncture, :rec_dermatitis, :rec_infection, :rec_burns, :rec_cuts, :condition, '{$id}')"; $stmt = $db->prepare($sql); for($i = 0, $l = count($_POST["department_name"]); $i < $l; $i++) { $loc_info = array(':department' => $_POST["department_name"][$i], ':participant' => $_POST["participant_name"][$i], ':activity' => $_POST["activity"][$i], ':location' => $_POST["location"][$i], ':rec_injuries' => $_POST["injuries"][$i], ':rec_injuries_timeframe' => $_POST["injury_time_frame"][$i], ':non_rec_injuries' => $_POST["non_rec_injuries"][$i], ':non_rec_injuries_timeframe' => $_POST["non_rec_injury_timeframe"][$i], ':competitor' => $_POST["competitor"][$i], ':cost_per_pair' => $_POST["cost_per_pair"][$i], ':usage_rate' => $_POST["usage_rate"][$i], ':leakage' => $_POST["leakage"][$i], ':cost_of_productivity' => $_POST["cost_of_productivity"][$i], ':non_rec_impact' => $_POST["non_rec_impact"][$i], ':non_rec_sprain' => $_POST["non_rec_sprain"][$i], ':non_rec_puncture' => $_POST["non_rec_puncture"][$i], ':non_rec_dermatitis' => $_POST["non_rec_dermatitis"][$i], ':non_rec_infection' => $_POST["non_rec_infection"][$i], ':non_rec_burns' => $_POST["non_rec_burns"][$i], ':non_rec_cuts' => $_POST["non_rec_cuts"][$i], ':rec_impact' => $_POST["impact"][$i], ':rec_sprain' => $_POST["sprain"][$i], ':rec_puncture' => $_POST["puncture"][$i], ':rec_dermatitis' => $_POST["dermatitis"][$i], ':rec_infection' => $_POST["infection"][$i], ':rec_burns' => $_POST["burns"][$i], ':rec_cuts' => $_POST["cuts"][$i], ':condition' => $_POST["condition"][$i] ); $stmt->execute($loc_info); }