Как загрузить данные в несколько таблиц SQL

Ниже мой скрипт для импорта данных в mysql:

foreach ($file_data as $row) {
    
    $sku = $row[$_POST["sku"]];
    $title = $row[$_POST["title"]];
    $slug = $row[$_POST["title"]];
    $product_type = "physical";
    $description = $row[$_POST["description"]];
}
   if (isset($sku))
 {
  $query = "
  INSERT INTO products
  (sku, slug, product_type) 
  VALUES ".implode(",", $sku).",".implode(",", $slug).",".implode(",", $product_type)."
  ";

  $statement = $connect->prepare($query);

  if ($statement->execute())
  {
   echo 'Data Imported Successfully';
  }
 }

А теперь кто-нибудь может мне помочь, как теперь загрузить $title и $description во вторую таблицу product_details?

@обновление @Mehrwarz

foreach ($file_data as $row) {
    
    $sku = $row[$_POST["sku"]];
    $title = $row[$_POST["title"]];
    $slug = $row[$_POST["slug"]];
    $product_type = "physical";
    $description = $row[$_POST["description"]];
    
 if (isset($sku)) {
        $statement = $connect->prepare("INSERT INTO products
         (sku, slug, product_type) 
         VALUES '$sku','$slug','$product_type'");
       $statement2 = $connect->prepare("INSERT INTO product_details
         (title, description) 
         VALUES '$title','$description'");
   
   
        if (!$statement->execute()) {
            $error = 'None or part of the data was updated';
        }
    }
}
echo $error ?? 'Data Updated Successfully';

Ну вы уже знаете, как сделать вставку. Так в чем же проблема? Вы случайно не спрашиваете, как получить идентификатор строки, вставленный в продукты, чтобы вы могли ссылаться на него в таблице сведений о продукте? Если нет, то непонятно, в чем проблема.

ADyson 27.11.2022 21:39

@ADyson в настоящее время в этом запросе я могу загружать данные только в одну таблицу «products», и как теперь добавить одновременно и загрузить данные во вторую таблицу «product_details»?

Marcin Wierzycki 27.11.2022 21:41

Чтобы вставить в другую таблицу, вы просто делаете еще один запрос на вставку

ADyson 27.11.2022 21:42

Ответ на ваш вопрос уже дан в предыдущем вопросе здесь stackoverflow.com/questions/74576424/…

Mehrwarz 27.11.2022 21:43

@Mehrwarz да, я сейчас думаю об этом. И как вы думаете, в этом ответе это должно работать? $statement = $connect->prepare("ОБНОВИТЬ продукты SET sku = '$sku', ГДЕ sku = '$data' AND lang_id = '$lang_id'"); $statement2 = $connect->prepare("UPDATE product_details SET title = '$title' WHERE sku = '$data' AND lang_id = '$lang_id'"); ? (пожалуйста, не смотрите на переменные, просто интересно, решит ли проблему добавление statment2 и другого запроса.)

Marcin Wierzycki 27.11.2022 21:48

@Mehrwarz, ты имеешь в виду что-то вроде этого? prnt.sc/CDLu92ZbUgeh

Marcin Wierzycki 27.11.2022 21:54

Сначала переберите каждую строку и создайте цепочку значений, например ('row1val1','row1val2','row1Val3'),('row2val1','row2val2','r‌​ow2val3').... для обеих таблиц, а затем запустите запрос на вставку.

Mehrwarz 27.11.2022 22:02

@Mehrwarz В настоящее время я добавляю цикл для каждой строки, но я не уверен в этом ('row1val1','row1val2','row1Val3'),('row2val1','row2val2','r‌​ow2val3'). Не могли бы вы проверить мое обновление и помочь мне исправить этот код в ответ?

Marcin Wierzycki 27.11.2022 22:17

Отвечает ли это на ваш вопрос? вставить данные из таблицы html в mysql

Daniel 28.11.2022 13:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
9
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Может быть, вы можете нажать любой массив

<?php

$query_array = [];



foreach ($file_data as $row) {
    
    $sku = $row[$_POST["sku"]];
    $title = $row[$_POST["title"]];
    $slug = $row[$_POST["title"]];
    $product_type = "physical";
    $description = $row[$_POST["description"]];

    if (isset($sku)){

        $query = 'INSERT INTO products
        (sku, slug, product_type) 
        VALUES SET title = "'.$title.',sku = "'.$sku.'", etc.. #add more"';

        $query = rtrim($query,',');
        array_push($query_array,$query);

    }




}

foreach ($query_array as $key => $value) {
    $mysqlconn->query($value);
}

и как теперь добавить к этому данные для вставки $title = $row[$_POST["title"]]; и $description = $row[$_POST["description"]]; во вторую таблицу product_details?

Marcin Wierzycki 27.11.2022 21:46
Ответ принят как подходящий

Это может сработать для вас.

$T1Values = "";
$T2Values = "";

foreach ($file_data as $row) {
    $T1Values .= "('" . $row[$_POST['sku']] . "','" . $row[$_POST['slug']] . ",'" . $row[$_POST['product_type']] . "),";
    $T2Values .= "('" . $row[$_POST['title']] . "','" . $row[$_POST['description']] . "'),";
}
if (isset($sku)) {

    $T1Values = trim(',', $T1Values);
    $T2Values = trim(',', $T2Values);

    $query1 = "INSERT INTO products (sku, slug, product_type) VALUES($T1Values)";

    $statement = $connect->prepare($query1);

    if ($statement->execute()) {
        $query2 = "INSERT INTO product_details (title, product_details) VALUES($T2Values)";
        $statement = $connect->prepare($query2);
        if ($statement->execute()) {
            echo "All records inserted successfully";
        }
    }
}

Это уязвимо для SQL-инъекций. Нет смысла использовать подготовленные операторы, если вы также не параметризуете входные значения.

ADyson 28.11.2022 08:39

Другие вопросы по теме