PHP / MYSQL CSV导入时fgetcsv循环vs LOAD DATA INFILE

时间:2017-01-02 13:22:06

标签: php mysql csv

我在外部网站上有一个CSV,想要将内容发送到mysql数据库。我尝试过:

$fp = fopen($file,"r");
$row = fgetcsv($fp,0,"|");
while ( $row = fgetcsv($fp,0,"|") ){
    foreach ($row as &$value) {
        $value = "\"". $value . "\"";
    }                           
    $sql = "INSERT INTO `table`(`ProductID`, `ProductCategory`, `Deeplink`, `ProductName`, `ImageURL`, `ImageURL2`, `ImageURL3`, `ImageURL4`, `ProductDescription`, `BrandName`, `Price`, `PreviousPrice`, `AvailableSizes`, `Color`, `EAN`, `Gender`, `Product_Quantity`, `Stylekey`, `Best_Performer`) VALUES("."". implode(",", $row) . ")";
    mysqli_query($link, $sql);  
};

到目前为止,第一印象这个工作正常,但很慢。慢慢没问题。有很多时间可以做到这一点。主要问题是,db中没有来自csv的所有行。我找不到导入的行和未导入的行之间的差异。

所以我尝试使用Load Data Infile。

首先下载csv:

file_put_contents("debug.csv", fopen("http://domain.com/debug.csv", 'r'))

然后:

$sql = "LOAD DATA LOCAL INFILE 'debug.csv'
        INTO TABLE aboutyou
        CHARACTER SET 'utf8' 
        FIELDS TERMINATED BY '|' 
        LINES TERMINATED BY '\n'
        IGNORE 1 LINES 
        (ProductID, ProductCategory, Deeplink, ProductName, ImageURL, ImageURL2, ImageURL3, ImageURL4, ProductDescription, BrandName, Price, PreviousPrice, AvailableSizes, Color, EAN, Gender, Product_Quantity, Stylekey, Best_Performer)
        SET ID = NULL
        ";
$result=mysqli_query($link, $sql);

在我的本地计算机上,“加载数据本地Infile”非常有效。所有数据都将导入并且速度非常快。在Web服务器上下载工作,但加载数据本地Infile(有或没有“本地”)不工作,并且没有输出错误。

0 个答案:

没有答案