Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP скрипт за импортиране на csv данни в mysql

Няколко съвета:

  • Не използвайте отхвърления ext/mysql , когато можете да използвате ext/mysqli или PDO.

  • Не четете целия csv файл в PHP променлива. Какво се случва, когато файлът е 500 MB?

  • Не пишете персонализиран PHP код за анализиране на csv данни, когато можете да използвате вградената функция fgetcsv() .

  • Не създавайте нов SQL израз за всеки ред в данните, когато можете да използвате подготвени изявления .

  • Не интерполирайте данни от външен файл в SQL изрази. Това рискува SQL инжектиране уязвимости, точно както когато интерполирате ненадеждни потребителски данни.

  • Не анализирайте и вмъквайте csv данни ред по ред, когато можете да използвате ЗАРЕЖДАНЕ НА ИНФАЙЛ ДАННИ команда. Това е 20 пъти по-бързо от вмъкването на ред по ред.

Ето едно по-просто решение:

<?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";

?>

Тествах това с PHP 5.3.26 на Mac, свързвайки се с MySQL 5.6.14 на Linux.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. показване на изображение, съхранено в mysql blob

  2. Изпращане на данни от android към сървъра чрез JSON

  3. Докато импортирате mysqldump файл ГРЕШКА 1064 (42000) близо до „ ■/“ на ред 1

  4. MySQL:Колона 'column_name', където клаузата е двусмислена

  5. MySQL Къде датата е по-голяма от един месец?