Здравствуйте! Проблема сохранить данные, которые приходят с клиента, в БД MySQL
Суть такая: на клиенте есть пара инпутов, название - цена и возможность добавления еще неограниченного количества таких пар.
На бекенд приходит один массив, который я разбиваю на два, цена и название соответственно.
Далее мне надо сохранить данные в БД, тут и начинается проблема. Я пытаюсь сделать из массива часть sql запроса, но не могу сделать одну строку сразу из двух массивов. Делая их по одному и пытаясь сохранить, получаю ошибку на втором запросе. Первым сохраняю id и название, цена сохраняется 0, а вторым пытаюсь добавить цену. Буду очень благодарен даже за направление куда копать.
вот код моих мытарств)
// принимаем id продукта и данные из формы
public function addWishProduct($id, $data) {
// если пришли данные с клиента
if (!empty($data['add-wish'])) {
$sql_part1 = ''; // создаю переменные для частей запроса для цены
$sql_part2 = ''; // для названия
$sql_part3 = ''; // и это для их id после сохранения в БД
// разбиваю пришедший массив на массивы цен и названий
foreach ($data['add-wish'] as $key => $value) {
if (($key % 2) != 0) {
$price[] = $value;
} else {
$title[] = $value;
} }
// делаю строку sql запроса для названия
foreach ($title as $value) {
$value = $value;
$sql_part1 .= "($id, '{$value}'),";
}
$sql_part1 = rtrim($sql_part1, ',');
// сохраняю название в БД. использую redbean. цена сохраняется 0
\R::exec("INSERT INTO wish (product_id, title) VALUES $sql_part1");
// извлекаю id сохраненных записей
$wish_id = \R::getAssoc("SELECT id FROM wish WHERE product_id = $id");
// делаю часть запроса с id
foreach ($wish_id as $value) {
$sql_part3 .= "$value,";
}
$sql_part3 = rtrim($sql_part3, ',');
// делаю часть запроса с ценой
foreach ($price as $value) {
$value = (int)$value;
$sql_part2 .= "($value),";
}
$sql_part2 = rtrim($sql_part2, ',');
// пытаюсь добавить к созданным выше записям цену. и это никак не выходит сделать. понимаю что эти запросы неправильные, это уже "методом тыка"
// проблема что строк может быть несколько и надо в запрос передать либо массивы // данных, либо строки с несколькими данными
//\R::exec("UPDATE 'wish' SET price = ? WHERE product_id = ?", [$sql_part2, $sql_part3]);
\R::exec("INSERT INTO wish (price) SET $sql_part2 WHERE id values $sql_part3");
return;
} }
Ответы (1 шт):
Автор решения: RAman
→ Ссылка
if (!empty($data['add-wish'])) {
$sql_part1 = '';
foreach ($data['add-wish'] as $key => $value) {
if (($key % 2) != 0) {
$price[] = $value;
} else {
$title[] = $value;
}
}
$mod = array_combine ( $title , $price );
foreach ($mod as $key => $value) {
$key = htmlspecialchars($key);
$value = (int)$value;
$sql_part1 .= "($id, '{$key}', {$value}),";
}
$sql_part1 = rtrim($sql_part1, ',');
\R::exec("INSERT INTO wish (product_id, title, price) VALUES $sql_part1");
return;
}