sql >> Database teknologi >  >> RDS >> Mysql

CSV Upload med PHP/MySQL

Når jeg nogensinde skulle importere en CSV til databasetabel, har jeg altid skrevet min egen csv-parser / importør. Det er ret simpelt.

Her er et eksempel.

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

?>

De analyserede forespørgsler vil se sådan ud (hvis du print_r det):

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

Du har to muligheder for den faktiske import til db:

  1. Byg en samling af import sql-forespørgsler og kør den i en batch (array_chunk) - dette betyder færre forespørgsler mod din db. Men som du kan se, tjekker jeg ikke værdierne fra CSV'en - dvs. jeg stoler på min datakilde og undslipper ikke noget - lidt farligt...

  2. Du udfører forespørgslen, så snart du byggede den med at undslippe værdierne - lille ulempe er, at den vil udføre en forespørgsel pr. række i csv...

Håber dette hjælper.




  1. Opsætning af fremmednøgler i phpMyAdmin?

  2. Sådan får du optegnelser fra de sidste 10 minutter i MySQL

  3. Node.js kan ikke godkende til MySQL 8.0

  4. Sådan bestiller du efter månedsnavn i SQLite