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