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

问题描述:

我一直在尝试使用LOAD DATA INFILE将csv文件导入到mysql数据库中。LOAD DATA INFILE - 显示导入的行数给出错误的值

一切正常或多或少正常工作,但是当我使用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 [email protected], [email protected], [email protected], [email protected]"; 

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

    $connect->query($import); 

    echo mysqli_affected_rows($connect); 
} 

mysqli_affected_rows()返回0,而mysqli_info()规定的所有行被跳过。任何想法为什么它不能正确显示?

希望这是足够的信息。谢谢!

编辑:

我已经有点忙不过来,在过去几天里在这方面努力,但我已经决定了,虽然没有具体回答导入到一个临时表中的我的问题德鲁的答案首先似乎是最有意义的,所以我决定采取这种做法。

+0

尝试:回声$连接 - > affected_rows; –

+0

并且... *是*加载的数据? –

+0

$ connect-> affected_rows;什么都没显示 – Edward144

我的评论进一步澄清:I would not be relying on $connect->affected_rows as ever a Rosetta stone for info. It is broken half the time.

这是一个建议。将您的LOAD DATA INFILE放入工作台,而不是最终的表格。一旦执行完成,您已经成功避开了该功能的限制,并且可以享受Insert on Duplicate Key Update(IODKU)的成果。

后者,当我想知道计数,我从控制表中得到一个分配的批号。如果您需要帮助,请告诉我。

但是我现在正在重新调整工作表中的数据,并带有批号。然后,我从工作台执行IODKU进入决赛桌,批次号码进入决赛桌中的列(是的,我可以调整模式来做到这一点,也许你不能)。为了解决对现有表的任何模式更改,以及查找案例或允许多行批次标识符已经命中的行,可以使用带有id的简单关联表。如果您愿意,可以使用交叉表。

如果并发性是一个问题(多个用户可能同时这样做),那么将采用锁定策略(理想情况下是INNODB行级锁定)。如果使用,使其快速。

然后我把我的计数从最终表(或相交表)中取出,其中batch id =我的批号。

参见本answer从一月

+0

虽然这并不严格回答问题(为什么affected_rows()不能准确显示数字),绝对是我会推荐的方法。 – Shadow

+0

如何说它被打破了一半的时间。即使从小版本升级,也有大量的错误报告。这是一团糟。而PDO rowCount之类的人也不得不采取其他措施来保持一定的理智。 – Drew

+0

我会小心这个说法。许多bug报告都是关于mysql_affected_rows()API函数是关于不支持某些语句(例如加载数据)的投诉,在其早期版本中遇到错误时返回各种结果(这是一种记录的行为)。当与php api库一起引发时,问题可能变得更加复杂,因为MySQL服务器的版本可能与PHP api库编译的C API的版本不同。 – Shadow