我在外部网站上有一个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(有或没有“本地”)不工作,并且没有输出错误。