Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę przesłać poszczególne wiersze CSV do różnych tabel w PHP?

W twoim przypadku najlepszym rozwiązaniem jest najprostsze, więc wystarczy stworzyć pięć zapytań, możesz to zrobić nawet w pętli:

$pdo = new PDO("mysql:host=127.0.0.1;dbname=yourdbname;charset=utf8", "username", "password");

if (($handle = fopen("test.csv", "r")) !== FALSE) {
    $row = 1;
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if ($row == 1) {
            $row++;
            continue;
        }
        $row++;

        foreach (['table1', 'table2', 'table3', 'table4', 'table5'] as $table) {
            $stmt = $pdo->prepare("INSERT INTO $table (name, title) VALUES (?,?)");
            $stmt->execute([$data[0], $data[1]]);
        }
    }
    fclose($handle);
}

Lub dla UPDATE z uid zastąp forech:

foreach (['table1', 'table2', 'table3', 'table4', 'table5'] as $table) {
    $stmt = $pdo->prepare("UPDATE $table SET name=?, title=? WHERE uid=?");
    $stmt->execute([$data[0], $data[1], $uid]);
}

Lub jeszcze lepiej z INSERT lub UPDATE, zauważ, że w tym przypadku używamy nazwanych parametrów.

foreach (['table1', 'table2', 'table3', 'table4', 'table5'] as $table) {
    $stmt = $pdo->prepare("INSERT INTO $table (uid, name, title) 
        VALUES (:uid, :name, :title) 
        ON DUPLICATE KEY UPDATE name=:name, title=:title");
    $stmt->bindValue('uid', $uid);
    $stmt->bindValue('name', $data[0]);
    $stmt->bindValue('title', $data[1]);
    $stmt->execute();
}

SQL dla table1 .. table5

CREATE TABLE table1 (
 uid int(11) NOT NULL AUTO_INCREMENT,
 name varchar(255) NOT NULL,
 title varchar(255) NOT NULL,
 PRIMARY KEY (uid)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

Uwaga: Kiedy lepiej opiszesz, jak chcesz zachować unikatowość, prawdopodobnie dodam kilka innych rozwiązań. W tej chwili kod nie wie, czy James, szef z CSV, to ten sam James, szef w DB.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Generowanie encji z bazy danych

  2. ADDDATE() Przykłady – MySQL

  3. podzapytanie zwraca więcej niż 1 wiersz

  4. Dziwny wyjątek SQLException:nie znaleziono kolumny

  5. MySQL wyszukaj dokładne słowo z $ w słowie