sql >> Database >  >> RDS >> Mysql

Hoe kan ik individuele CSV-rijen uploaden naar verschillende tabellen in PHP?

In jouw geval is de beste oplossing de eenvoudigste, dus als je vijf zoekopdrachten maakt, kun je het zelfs in de loop doen:

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

Of voor UPDATE met uid vervang de 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]);
}

Of nog beter met INSERT of UPDATE, merk op dat we in dit geval benoemde params gebruiken.

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 voor 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

Opmerking: Als je beter beschrijft hoe je de uniciteit wilt behouden, zal ik waarschijnlijk nog een aantal andere oplossingen toevoegen. Op dit moment weet de code niet of James, chef van CSV dezelfde James is, chef in DB.




  1. Validatie UNIEK veld in Codeigniter met 2 index

  2. Gegevens verwijderen uit Elastisearch

  3. sql hoe u drie query's uit twee tabellen in één query kunt combineren

  4. Alle berichten tellen die tot een categorie EN zijn subcategorieën behoren