我想通过可手动运行以更新数据的PHP脚本将表格从CSV文件导入SQLite DB。
以下是我要实现的目标的列表:
;
我发现了一个由于某种原因无法运行的脚本:
<?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); ?>
我希望有人知道如何解决我的问题…
最好的问候戴夫
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 ); }