Здравствуйте! Проблема сохранить данные, которые приходят с клиента, в БД 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;
    }
→ Ссылка