【发布时间】:2016-10-15 20:38:27
【问题描述】:
我正在将 4,000 多个 CSV 文件导入 MySQL。我使用的代码对于前 2,750 个 CSV 文件非常有效——数据被插入 MySQL 就很好了。然而,在前 2,750 个文件之后,数据并没有被插入 MySQL,即使 (a) CSV 中的数据格式/类型没有改变 (b) MySQL 显示数据插入成功,没有错误。到底是怎么回事?这是否与数据库的大小有关——在插入 2,750 次 CSV 后,它大约为 180 GB。相关代码如下。
$query = "LOAD DATA LOCAL INFILE '$csvfilelocation' INTO TABLE xxx FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES (@col1,@col2,@dummy,@dummy,@col5,@col6) set abc=@col1,efg=@col2,hij=@col5,klm=@col6";
$status = mysqli_query($con,$query) or die(mysqli_error($con));
//If successful insert, mark the CSV as imported
$filename = $csvfilelocation;
if ($status) {
$stmt = mysqli_prepare($con, "UPDATE xxx_list SET putindatabase = 1 WHERE filename = ?");
mysqli_stmt_bind_param($stmt, "s", $filename);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
【问题讨论】:
-
删除第 2751 个并重试。
-
@selami 试过了。不工作。此外,除了其中的数据之外,所有 CSV 在列、格式等方面都完全相同。
-
可能发生超时;尝试增加它或将其设置为零。 php.net/manual/en/function.set-time-limit.php 和
upload_max_filesize可能会在这里发挥作用,但我怀疑后者。 -
@Fred-ii- 它没有超时。该进程正在运行——它继续迭代 CSV,就好像一切正常。但是,数据不在 MySQL 中。
-
然后检查 UPDATE 查询中的错误,看看它是否捡起任何东西并报告错误,如果它与它相关。