Частенько бывает нужен скрипт, чтобы из консоли быстро подтянуть csv в базу данных для более комфортной работы.
Большинство распространенных в интернете php-mysql скриптов подразумевают импорт csv файлов в таблицы с заранее известным количеством полей.
Данный скрипт лишен этого недостатка — он считывает из файла первую строку, которая является заголовками полей-колонок, и, перед импортом, создает таблицу с соответствующей структурой. Поля после создания имеют тип varchar(250), и уже потом меняются под конкретные цели и ставятся индексы.
Этот сниппет я использую для работы со списками емейлов. После импорта в базу можно приступать с сравнению с запрет-листами (md5 suppression list) и дальнейшей работе с рассылками.
<?php error_reporting(E_ERROR | E_WARNING | E_PARSE); $host = 'localhost'; $user = 'db_user'; $pass = 'db_pass'; $database = 'db_name'; $db = mysql_connect($host, $user, $pass); mysql_query("use $database", $db); /********************************************************************************/ // Parameters: filename.csv table_name $argv = $_SERVER[argv]; if($argv[1]) { $file = $argv[1]; } else { echo "Please provide a file name\n"; exit; } if($argv[2]) { $table = $argv[2]; } else { $table = pathinfo($file); $table = $table['filename']; } /********************************************************************************/ // Get the first row to create the column headings $fp = fopen($file, 'r'); $frow = fgetcsv($fp); foreach($frow as $column) { if($columns) $columns .= ', '; $columns .= "`$column` varchar(250)"; } $drop = "drop table if exists $table"; mysql_query($drop, $db); $create = "create table if not exists $table ($columns);"; mysql_query($create, $db); /********************************************************************************/ // Import the data into the newly created table. $file = $_SERVER['PWD'].'/'.$file; $q = "load data infile '$file' into table $table fields terminated by ',' ENCLOSED by '\"' ignore 1 lines"; mysql_query($q, $db); ?>