sql >> Databáze >  >> RDS >> Mysql

Jak mohu nahrát jednotlivé řádky CSV do různých tabulek v PHP?

Ve vašem případě je nejlepším řešením to nejjednodušší, takže stačí vytvořit pět dotazů a můžete to udělat i ve smyčce:

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

Nebo pro UPDATE s uid nahraďte 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]);
}

Nebo ještě lépe s INSERT nebo UPDATE, všimněte si, že v tomto případě používáme pojmenované parametry.

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

Poznámka: Když lépe popíšete, jak chcete zachovat jedinečnost, pravděpodobně přidám další řešení. V tuto chvíli kód neví, jestli James, šéf z CSV, je stejný James, šéf v DB.




  1. Datový typ MySQL DECIMAL

  2. Jak získat přístup k internímu indexu pole pomocí postgreSQL?

  3. Vytvořit přílohu... Vyberte příkaz v Laravel

  4. Resetování AUTO_INCREMENT trvá v MySQL dlouho