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

Przesyłanie CSV za pomocą PHP/MySQL

Ilekroć musiałem zaimportować plik CSV do tabeli bazy danych, zawsze pisałem własny parser/importer csv. To całkiem proste.

Oto przykład.

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

?>

Przeanalizowane zapytania będą wyglądać tak (jeśli 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);
)

Masz dwie opcje faktycznego importowania do bazy danych:

  1. Zbuduj kolekcję importu zapytania sql i wykonaj go w partii (array_chunk) — oznacza to mniej zapytań dotyczących bazy danych. Jednak, jak widać, nie sprawdzam wartości z pliku CSV — tj. ufam mojemu źródłu danych i niczego nie uciekam — trochę niebezpieczne...

  2. Zapytanie wykonujesz, gdy tylko je zbudujesz z pominięciem wartości - małą wadą jest to, że wykona jedno zapytanie na wiersz w csv....

Mam nadzieję, że to pomoże.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykonaj skrypt/polecenie powłoki z poziomu wyzwalacza/procedury przechowywanej MySQL

  2. Dynamiczny MySQL ze zmiennymi lokalnymi

  3. mysql nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, działający program lub wsad

  4. ImportError:brak modułu o nazwie connector.conversion

  5. PDO, $_GET i wybieranie z bazy danych MySQL