Я получаю некоторые данные из формы в виде массивов. Каждый $_POST
значение является сам массив:Как вставить несколько массивов в базу данных?
//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]);
Теперь я знаю, что я мог бы использовать цикл Еогеасп для цикла по каждому из этих массивов и подставлять соответствующие значения по одному в моей базе данных:
foreach($department_name as $department) {
$query = "INSERT INTO location_info (`department`) VALUES ('{$department}')";
$result = mysqli_query($connection, $query);
}
Это похоже на много кода для всех моих 35 переменных POST, а также много работы для сервера. Что еще более важно, как я собираюсь «выровнять» каждую часть данных? Из-за цикла он создавал бы новую строку внутри базы данных каждую итерацию и оставлял пустые поля для всех остальных столбцов.
Так что я искал, как я мог цикл по нескольким массивам сразу и нашел это решение:
<?php
$ZZ = array('a', 'b', 'c', 'd');
$KK = array('1', '2', '3', '4');
foreach($ZZ as $index => $value) {
echo $ZZ[$index] . $KK[$index];
echo "<br/>";
}
?>
Но я действительно не понимаю, как это работает и как я могу применить это мой код?
В основном в качестве примера у меня есть несколько массивов, таких как:
$department_name = array("A", "B", "C");
$participant_name = array(1, 2, 3);
И мне нужно, чтобы вставить их в свою базу данных, как это:
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);
Так что я думаю, что я должен использовать цикл Еогеасп и циклически перебирать все массивы сразу, чтобы вставлять данные по строкам, но я не вижу, как я могу применить код, который я нашел выше, к моему коду?
После некоторых полезных комментариев я переключился на PDO и добился определенного прогресса.
Мой текущий код выглядит следующим образом.
соединения:
<?php
try {
$dsn = 'mysql:host=localhost;dbname=assessment';
$db = new PDO($dsn, 'xxx', 'xxx');
} catch (Exception $e) {
$error = $e->getMessage();
}
?>
Дальше у меня есть:
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 < $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],
':general_id' => $_POST["id"][$i]
);
$stmt->execute($loc_info);
}
} catch (Exception $e) {
$error = $e->getMessage();
}
Но это все еще не работает.
Мысли? Могу ли я помещать массив внутри массива?
Просто сделайте простой подготовленный оператор и привяжите все значения к нему. Смотрите: http://php.net/manual/en/pdo.prepare.php – Rizier123
wow - я знал, что там может быть решение. Спасибо. Я расскажу о своем обновленном коде –
. Думаю, вы делаете это более сложным, чем это. Вы просто хотите сделать простой запрос здесь. Также взгляните на: http://stackoverflow.com/q/6980792/3933332, чтобы увидеть несколько простых примеров использования PDO – Rizier123