2016-08-12 204 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

相關問題