sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag ladda upp enskilda CSV-rader till olika tabeller i PHP?

I ditt fall är den bästa lösningen den enklaste, så bara skapa fem frågor, du kan till och med göra det i slingan:

$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);
}

Eller för UPPDATERING med uid ersätt 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]);
}

Eller ännu bättre med INSERT eller UPDATE, notera att i det här fallet använder vi namngivna params.

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 för 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

Obs! När du ska beskriva bättre hur du vill bibehålla unikhet kommer jag förmodligen att lägga till några andra lösningar. Just nu vet koden inte om James, chef från CSV, är samma James, chef i DB.




  1. Flera rader till ett kommaseparerat värde i SQL Server

  2. Hur kan jag få kolumnnamn från en tabell i Oracle?

  3. Tabell 'mysql.user' existerar inte:ERROR

  4. Hur får man antalet element i en JSON-array lagrad som CLOB med Oracle 12c?