通过PHP导入CSV文件到SQLite数据库


Import CSV File into a SQLite Database via PHP

我想通过PHP脚本从CSV文件导入一个表到SQLite数据库中,我可以手动运行以更新数据。

这是我想要实现的目标清单:

  1. 将旧表(称为"producte")重命名为product-currentdate(或删除表)
  2. 然后从CSV文件(;分隔,ISO 8859-1字符集/CSV文件的第一行包含表头)中导入文件
  3. 在"product"表中保存日期

我发现了一个脚本,由于某种原因不工作:

<?php
 $dir = 'sqlite:test.sqlite';
 $dbh  = new PDO($dir) or die("cannot open the database");

 $query = <<<eof
  LOAD DATA LOCAL INFILE 'produkte.csv'
  INTO TABLE produkte
  FIELDS TERMINATED BY ';'
  OPTIONALLY ENCLOSED BY '"' 
  LINES TERMINATED BY ''n'
  IGNORE 1 LINES 
  (id, Hauptmenue, Produktgruppe, Beschreibung, Text, Bild, Shop, Info)
 eof;
 $dbh->query($query);
?>

我希望有人知道如何解决我的问题。

敬祝Dave

Federico Cingolani已经在Github上发布了一个满足您需求的php脚本

 <?php
function import_csv_to_sqlite(&$pdo, $csv_path, $options = array())
{
    extract($options);
    if (($csv_handle = fopen($csv_path, "r")) === FALSE)
        throw new Exception('Cannot open CSV file');
    if(!$delimiter)
        $delimiter = ',';
    if(!$table)
        $table = preg_replace("/[^A-Z0-9]/i", '', basename($csv_path));
    if(!$fields){
        $fields = array_map(function ($field){
            return strtolower(preg_replace("/[^A-Z0-9]/i", '', $field));
        }, fgetcsv($csv_handle, 0, $delimiter));
    }
    $create_fields_str = join(', ', array_map(function ($field){
        return "$field TEXT NULL";
    }, $fields));
    $pdo->beginTransaction();
    $create_table_sql = "CREATE TABLE IF NOT EXISTS $table ($create_fields_str)";
    $pdo->exec($create_table_sql);
    $insert_fields_str = join(', ', $fields);
    $insert_values_str = join(', ', array_fill(0, count($fields),  '?'));
    $insert_sql = "INSERT INTO $table ($insert_fields_str) VALUES ($insert_values_str)";
    $insert_sth = $pdo->prepare($insert_sql);
    $inserted_rows = 0;
    while (($data = fgetcsv($csv_handle, 0, $delimiter)) !== FALSE) {
        $insert_sth->execute($data);
        $inserted_rows++;
    }
    $pdo->commit();
    fclose($csv_handle);
    return array(
            'table' => $table,
            'fields' => $fields,
            'insert' => $insert_sth,
            'inserted_rows' => $inserted_rows
        );
}