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

Nahrání CSV pomocí PHP/MySQL

Kdykoli jsem musel importovat CSV do databázové tabulky, vždy jsem napsal svůj vlastní analyzátor / importér CSV. Je to docela jednoduché.

Zde je příklad.

test.csv

Firstname,Lastname,Age
"Latheesan","Kanes",26
"Adam","Smith",30

test.php

<?php

// Mini Config
$csv_file       = 'test.csv';
$delimiter      = ',';
$enclosure      = '"';
$skip_first_row = true;
$import_chunk   = 250;

// Parse CSV & Build Import Query
$import_queries = array();
$first_row_skipped = false;
if (($handle = fopen($csv_file, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, $delimiter, )) !== FALSE) {
        if ($skip_first_row && !$first_row_skipped) {
            $first_row_skipped = true;
            continue;
        }
        list($firstname, $lastname, $age) = $data;
        $import_queries[] = "INSERT INTO myTable (firstname, lastname, age) VALUES ('$firstname', '$lastname', $age);";
    }
    fclose($handle);
}

// Proceed if any data got parsed
if (sizeof($import_queries))
{
    foreach(array_chunk($import_queries, $import_chunk) as $queries)
    {
        $dbh->query(implode(' ', $queries));
    }
}

?>

Analyzované dotazy budou vypadat takto (pokud print_r to):

Array
(
    [0] => INSERT INTO myTable (firstname, lastname, age) VALUES ('Latheesan', 'Kanes', 26);
    [1] => INSERT INTO myTable (firstname, lastname, age) VALUES ('Adam', 'Smith', 30);
)

Pro vlastní import do db máte dvě možnosti:

  1. Vytvořte kolekci importu SQL dotazu a spusťte jej v dávce (array_chunk) – to znamená méně dotazů na vaši db. Jak však můžete vidět, nekontroluji hodnoty z CSV - tj. věřím svému zdroji dat a nic neuniknu - trochu nebezpečné...

  2. Dotaz spustíte, jakmile jste jej vytvořili s escapováním hodnot - malou nevýhodou je, že provede jeden dotaz na řádek v csv....

Doufám, že to pomůže.




  1. Chyba NodeJS Postgres getaddrinfo ENOTFOUND

  2. MySql získává počet každého typu prvku ve sloupci

  3. Použití MySQL ve Flasku

  4. vyberte součet do určité částky a poté aktualizujte určitá pole na základě podmínky