将多个文本文件导入mysql数据库中的不同表

时间:2016-08-12 09:20:46

标签: php mysql loops import load-data-infile

我需要将一堆文本文件(3098)导入数据库。每个文件必须位于不同的表中。我的想法是使用一个为每个文件创建一个新表的循环。我是否必须在php中使用foreach来浏览所有文件或只是mysql循环以及我应该在LOAD DATA LOCAL INFILE之后放置的文件名。还想知道如何创建theese表(也许使用他们名字的变量)。任何其他想要完成我的任务的想法都会有所帮助。

1 个答案:

答案 0 :(得分:0)

只需使用php的glob()遍历所有.txt文件,然后在每个文件上运行MySQL的LOAD DATA INFILE命令。但首先,在MySQL中使用适当的数据类型列创建目标表。然后在PHP中运行导入代码。如上所述,此方法假设所有.txt文件具有相同的结构,都可以导入到一个数据库表中。

MYSQL (在控制台或代码中一次性运行)

CREATE TABLE destinationTable (
    ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    col1 int(11),
    col2 varchar(255),
    col3 decimal(10,2),
    col4 date,
    ...
);

PHP (使用迭代循环;下面假定以逗号分隔的文件,调整为实际分隔符)

// OPEN DATABASE CONNECTION
$dbh = new PDO("mysql:host=$host;dbname=$database",$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

foreach (glob("/path/to/folder/*.txt") as $file) {

    $sql = "LOAD DATA INFILE '".$file."' 
            INTO TABLE destinationTable 
            FIELDS TERMINATED BY ',' 
            OPTIONALLY ENCLOSED BY '\"' 
            LINES TERMINATED BY '\r\n';";

    $dbh->query($sql);

}

// CLOSE CONNECTION
$dbh = null;