使用 php 将数据从文件导入到 MySQL 是否有更快的方法?

Is there a faster way to import data from a file to MySQL using php?

好的,所以我得到了大约 100k-1M 行文本,我总是将它们导入到数据库中。我使用的代码如下:

$lines = new SplFileObject('/home/file.txt');
while(!$lines->eof()) {
    $lines->next();       //Skipping first line
    $row = explode(',',$lines);
    for($i = 0; $i<4; $i++){
        if(!isset($row[$i])){
            $row[$i] = null;
        }
    }
    $y = (float) $row[1];
    $z = (float) $row[2];
    $load_query = "INSERT IGNORE INTO new (datetime_gmt,field2,field3)
    VALUES ('".$row[0]."','".$y."','".$z."');";

    if(!$mysqli->query($load_query)){
      die("CANNOT EXECUTE".$mysqli->error."\n");
    }
}
$lines = null;

但是,它花费的时间太长了。有没有更快的方法,还是我坚持使用这种方法?

PS。我不想使用 MySQL 的 "INSERT DATA INFILE".

正如所写,您 运行 每行都有一个插入语句。如果将单个多插入语句编译为 INSERT INTO table (foo, bar) VALUES (1, 2), (3, 4), (5, 6); 格式,最后执行一次,速度会快得多。与此类似的东西,但可以进一步清理。

$lines = new SplFileObject('/home/file.txt');
$load_query = "INSERT IGNORE INTO new (datetime_gmt,field2,field3)
    VALUES ";
while(!$lines->eof()) {
    $lines->next();       //Skipping first line
    $row = explode(',',$lines);
    for($i = 0; $i<4; $i++){
        if(!isset($row[$i])){
            $row[$i] = null;
        }
    }
    $y = (float) $row[1];
    $z = (float) $row[2];
    $load_query .= "('".$row[0]."','".$y."','".$z."'),";
}

if(!$mysqli->query(rtrim($load_query, ','))) {
    die("CANNOT EXECUTE".$mysqli->error."\n");
}
$lines = null;

还要确保数据是可信的。如果文件可以来自外部用户,直接附加到查询字符串会创建一个 SQL 注入向量。