gpt4 book ai didi

php - LOAD DATA INFILE - 显示导入的行数给出了错误的值

转载 作者:行者123 更新时间:2023-11-29 01:52:18 25 4
gpt4 key购买 nike

我一直在尝试使用 LOAD DATA INFILE 将 csv 文件导入 mysql 数据库。

一切都或多或少地正常工作,但是当我使用 mysqli_info() 或 mysqli_affected_rows() 时,它们都显示没有为查询导入任何行。尽管我看到行已正确导入。

我正在尝试做的事情的简化版本(我实际导入的列更少):

$server = 'localhost';
$username = 'root';
$password = 'password123';
$database = 'database_name';

$connect = new mysqli($server, $username, $password, $database);

$files = scandir('imports/');

foreach($files as $file) {
$import =
"LOAD DATA INFILE 'imports/$file'
IGNORE INTO TABLE table_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(@id, @name, @address, @product)
set id=@id, name=@name, address=@address, product=@product";

if(! $connect->query($import)) {
echo 'Failed';
}

$connect->query($import);

echo mysqli_affected_rows($connect);
}

mysqli_affected_rows() 返回 0,而 mysqli_info() 表示所有行都已被跳过。知道为什么它不能正确显示吗?

希望这些信息足够了。谢谢!

编辑:

过去几天我太忙了,没时间处理这个问题,但我决定,虽然它没有具体回答我的问题,但德鲁首先导入临时表的回答似乎最有意义所以我决定接受它。

最佳答案

进一步澄清我的评论:我不会像以往那样依赖 $connect->affected_rows 来获取信息。它有一半是坏的。

这是一个建议。将 LOAD DATA INFILE 执行到工作表中,而不是最终所需的表中。执行此操作后,您已成功摆脱该功能的限制并可以享受 Insert on Duplicate Key Update 的成果。 (IODKU)。

使用后者,当我想知道计数时,我会从控制表中获得分配的批号。如果您需要这方面的帮助,请告诉我。

但我现在要回到工作表中的数据点,手头有一个批号。然后,我将 IODKU 从工作表执行到最终表,批号随之进入最终表中的列(是的,我可以调整模式来做到这一点,也许你不能)。为了绕过对现有表的任何架构更改,并查找案例或允许具有多个批处理 ID 的行命中它,可以使用带有 ID 的简单关联表。如果您愿意,可以使用相交表。

如果并发性是一个问题(多个用户可能同时执行此操作),则采用锁定策略(理想情况下是 INNODB 行级锁定)。如果使用,请使其快速。

然后我从最终表(或相交表)中获取我的计数,其中批处理 ID = 我手头的批处理号。

另见 answer从一月开始

关于php - LOAD DATA INFILE - 显示导入的行数给出了错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248558/

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