gpt4 book ai didi

php - 有没有更快的方法使用 php 将数据从文件导入 MySQL?

转载 作者:行者123 更新时间:2023-11-29 05:08:15 24 4
gpt4 key购买 nike

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

$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;

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

附言。我不想使用 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 注入(inject)向量。

关于php - 有没有更快的方法使用 php 将数据从文件导入 MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44391678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com