自动格式化1000个相同的csv文件导入MySQL?

时间:2017-03-23 18:06:53

标签: php mysql csv

我有大约1000个csv文件来保存客户端信息,它们的格式都是相同的。我试图将所有这些文件移动到一个MySQL数据库表中,无论是在一个表上,还是每个csv一个表,无论哪个更合理。

无论如何,我只能找到有关使用几个csv文件进行操作的信息,手动进入它们并正确格式化,然后导入MySQL。超过1000个文件我无法做到这一点。

文件来自谷歌电子表格,这是公司客户的原始主机(每个都有自己的数据电子表格)。

转到我为公司建立的应用程序。

1 个答案:

答案 0 :(得分:1)

这是我的CSV导入程序的常规版本。 创建一个表格并替换' your_table_name_here'与你的桌子。创建所有列并在包含所有CSV文件的文件夹中运行此脚本。它将尽力将所有列与数据匹配。

//Create database connection


$host = '127.0.0.1';
$db   = 'your_database';
$user = 'username';
$pass = 'password';
$charset = 'utf8';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
    ];
$pdo = new PDO($dsn, $user, $pass, $opt);



//Run this script in the folder that has all the CSV files that you want to import


//Grab list of all CSV files
$files=glob('*.csv');


foreach($files as $file)
{

    $handle = fopen($file, "r");
    $cnt = 0;
    $is_first = true;
    echo "OPENING $file\n";

    if($handle)
        //Change this value. Usually delimiter is ',' but if your CSV file has something else, you will need to modify this value
        $delimiter='|';

    while (($csv = fgetcsv($handle, 5000, $delimiter)) !== false) {

        $d = array();

        if ($is_first) {
            $is_first = false;
            $header=$csv;

            $inserter=$pdo->prepare("replace into your_table_name_here(`".implode('`,`',$header)."`)
                values (:".implode(',:',$header).");");
        }
        else {
            $to_insert=array();
            foreach($csv as $key=>$val)
            {
                $to_insert[':'.$header[$key]]=$val;
            }
            $inserter->execute($to_insert);
        }
    }
}