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

PHP-script til at importere csv-data til mysql

Flere tips:

  • Brug ikke den forældede ext/mysql , når du kan bruge ext/mysqli eller PDO.

  • Læs ikke hele csv-filen ind i en PHP-variabel. Hvad sker der, når filen er 500 MB?

  • Skriv ikke tilpasset PHP-kode til at parse csv-data, når du kan bruge den indbyggede funktion fgetcsv() .

  • Opret ikke en ny SQL-sætning for hver række i dataene, når du kan bruge udarbejdede erklæringer .

  • Interpoler ikke data fra en ekstern fil til SQL-sætninger. Dette risikerer SQL-injektion sårbarheder, ligesom når du interpolerer upålidelige brugerinput.

  • Undlad at parse og indsætte csv-data række for række, når du kan bruge MySQL's INDLÆS DATAINFIL kommando. Det er 20 gange hurtigere end at indsætte række for række.

Her er en enklere løsning:

<?php
$databasehost = "localhost"; 
$databasename = "test"; 
$databasetable = "sample"; 
$databaseusername="test"; 
$databasepassword = ""; 
$fieldseparator = ","; 
$lineseparator = "\n";
$csvfile = "filename.csv";

if(!file_exists($csvfile)) {
    die("File not found. Make sure you specified the correct path.");
}

try {
    $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
        $databaseusername, $databasepassword,
        array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );
} catch (PDOException $e) {
    die("database connection failed: ".$e->getMessage());
}

$affectedRows = $pdo->exec("
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
      FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
      LINES TERMINATED BY ".$pdo->quote($lineseparator));

echo "Loaded a total of $affectedRows records from this csv file.\n";

?>

Jeg testede dette med PHP 5.3.26 på en Mac og oprettede forbindelse til MySQL 5.6.14 på Linux.



  1. Hvordan inkluderes det samlede antal returnerede rækker i resultatsættet fra SELECT T-SQL-kommandoen?

  2. Hvordan opretter man forbindelse til MySQL-databasen?

  3. Introduktion til journalvedligeholdelse

  4. SQL Server 2008 Windows Auth Login Fejl:Login er fra et domæne, der ikke er tillid til