2016-08-12 123 views
0

我需要将一堆文本文件(3098)导入到数据库中。每个文件必须位于不同的表格中。我的想法是使用一个循环为每个文件创建一个新表。我是否必须在php中使用foreach来查看所有文件或者mysql循环,以及我应该在LOAD DATA LOCAL INFILE后面输入什么文件名。还想知道如何创建这些表(可能使用变量来表示它们的名称)。任何其他想法来完成我的任务将是有益的。将多个文本文件导入到mysql数据库中的不同表中

+0

'LOAD DATA LOCAL INFILE'后面您放置了您要导入的文件的名称。你会放什么其他名字? :-)另外'也想知道我怎么可以创建这些文件夹 - 什么文件夹?您在该评论前没有提及任何文件夹。 – ADyson

+0

P.S.你可以完全使用MySQL来编写它,但我怀疑PHP可能使它更容易 – ADyson

+0

@ADyson我的意思是表格不是文件夹:D。 –

回答

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; 
+0

这似乎很好,但我有一个连接PHP和MySQL的问题。我在我的域中运行php,但只有我可以连接到的数据库是phpMyAdmin中的相应数据库。问题是phpMyAdmin不支持'LOAD DATA INFILE'。所以,如果你有任何想法如何连接我的XAMPP服务器..... @Parfait –

+0

Phpmyadmin只是一个GUI服务器的控制台。你的MySQL设置没有启用'LOAD DATA INFILE'。参见[this](http://stackoverflow.com/questions/10762239/mysql-enable-load-data-local-infile)。此外,您可以在终端/命令行(不需要浏览器,apache,服务器等)上运行PHP脚本,就像其他开源语言--Perl,Python,R等一样。 – Parfait

相关问题