PHP/MYSQL CSV导入,而fgetcsv循环与加载数据填充

PHP/MYSQL CSV导入,而fgetcsv循环与加载数据填充,php,mysql,csv,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 = "INS

我有一个外部网站上的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);  
};
到目前为止,给人的第一印象是,这很好,但进展缓慢。慢慢来没问题。有很多时间去做。主要问题是,数据库中并非所有来自csv的行。我找不到导入行和未导入行之间的差异

所以我尝试了加载数据填充

首先下载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);

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

只有当您的服务器和客户端都已配置为允许时,本地才起作用。例如,如果mysqld是以--local infle=0启动的,那么local不起作用。您说“output no error”,但是否显式检查MySQLi是否有错误<代码>回显mysqli_错误($link)以进行检查。共享主机通常禁用
加载数据填充
我已经检查了mysqli错误。mysqli_查询($link,“从表中删除”);工作正常。使用LOAD DATA INFILE时,我得到:“拒绝用户‘username’@‘localhost’(使用密码:YES)的访问”,使用LOAD DATA LOCAL INFILE时,我得到“此MySQL版本不允许使用的命令”