Php 将逗号分隔的文件导入mysql

Php 将逗号分隔的文件导入mysql,php,mysql,Php,Mysql,我正在下载一个远程文本文件并将其导入本地mysql数据库 该格式最近已更改为在其中一列中包含逗号,并导致导入失败,错误为“第1行CSV输入中的字段计数无效”。数据现在如下所示: "bonita","FL","212025920","2012929","Hooker,Bill" 如何更新此代码段以允许在引号内使用逗号 foreach(explode($lineseparator,$csvcontent) as $line) { $lines++; $line = trim($

我正在下载一个远程文本文件并将其导入本地mysql数据库

该格式最近已更改为在其中一列中包含逗号,并导致导入失败,错误为“第1行CSV输入中的字段计数无效”。数据现在如下所示:

"bonita","FL","212025920","2012929","Hooker,Bill"
如何更新此代码段以允许在引号内使用逗号

foreach(explode($lineseparator,$csvcontent) as $line) {

    $lines++;

    $line = trim($line," \t");

    $line = str_replace("\r","",$line);

    /************************************
    This line escapes the special character. remove it if entries are already escaped in the csv file
    ************************************/
    $line = str_replace("'","\'",$line);
    /*************************************/

    $linearray = explode($fieldseparator,$line);

    $linemysql = implode("','",$linearray);

    $linemysql = str_replace("\"","",$linemysql);###code added

        $query = "insert ignore into $databasetable values('$linemysql');";

LOAD DATA LOCAL infle
带有以“,”结尾的
字段的
选项应直接读取文件。
LOAD DATA infle
也比标准的
INSERT
语句快

这很接近,但我不认为TRIM()正在删除选项卡:


LOAD DATA LOCAL infle'/my/LOCAL/file/path.csv'IGNORE to TABLE mytable字段以“,”结尾,以“\r\n”(@a,@b,@c,@d,@e)结尾的行以“,”结尾。SET col1=TRIM(@a),col2=TRIM(@b),col3=TRIM(@c),col4=TRIM(@d)col5=TRIM(@e)
LOAD DATA LOCAL inflie>“
选项应直接读取文件<代码>加载数据填充也比标准的
插入
语句快

这很接近,但我不认为TRIM()正在删除选项卡:


LOAD DATA LOCAL infle'/my/LOCAL/file/path.csv'IGNORE to TABLE mytable字段以“\r\n”(@a,@b,@c,@d,@e)结尾的行“,”括起来)SET col1=TRIM(@a),col2=TRIM(@b),col3=TRIM(@c),col4=TRIM(@d)col5=TRIM(@e)
示例表:

CREATE TABLE `table1` (
    `id` VARCHAR(50) NULL DEFAULT NULL,
    `a1` VARCHAR(50) NULL DEFAULT NULL,
    `b1` VARCHAR(50) NULL DEFAULT NULL,
    `c1` VARCHAR(50) NULL DEFAULT NULL,
    `d1` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoD1B;
load data local infile 'd:/import.csv' into table table1 fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
(id, a1, b1, c1, d1)
导入查询:

CREATE TABLE `table1` (
    `id` VARCHAR(50) NULL DEFAULT NULL,
    `a1` VARCHAR(50) NULL DEFAULT NULL,
    `b1` VARCHAR(50) NULL DEFAULT NULL,
    `c1` VARCHAR(50) NULL DEFAULT NULL,
    `d1` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoD1B;
load data local infile 'd:/import.csv' into table table1 fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
(id, a1, b1, c1, d1)
导入.csv

"bonita1","FL1","212025920","2012929","Hooker,Bill"
"bonita2","FL2","212025920","2012929","Hooker,Bill"
"bonita3","FL3","212025920","2012929","Hooker,Bill"

示例表:

CREATE TABLE `table1` (
    `id` VARCHAR(50) NULL DEFAULT NULL,
    `a1` VARCHAR(50) NULL DEFAULT NULL,
    `b1` VARCHAR(50) NULL DEFAULT NULL,
    `c1` VARCHAR(50) NULL DEFAULT NULL,
    `d1` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoD1B;
load data local infile 'd:/import.csv' into table table1 fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
(id, a1, b1, c1, d1)
导入查询:

CREATE TABLE `table1` (
    `id` VARCHAR(50) NULL DEFAULT NULL,
    `a1` VARCHAR(50) NULL DEFAULT NULL,
    `b1` VARCHAR(50) NULL DEFAULT NULL,
    `c1` VARCHAR(50) NULL DEFAULT NULL,
    `d1` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoD1B;
load data local infile 'd:/import.csv' into table table1 fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
(id, a1, b1, c1, d1)
导入.csv

"bonita1","FL1","212025920","2012929","Hooker,Bill"
"bonita2","FL2","212025920","2012929","Hooker,Bill"
"bonita3","FL3","212025920","2012929","Hooker,Bill"

将函数重写为:

     foreach(explode($lineseparator,$csvcontent) as $line) {

        $lines++;
        $line = trim($line," \t");
        $line = str_replace("\r","",$line);

        $lineArray = str_getcsv($line, ",", '"');
        $linemysql = implode("','",$lineArray);
         $query = "insert ignore into $databasetable values('$linemysql');";
        //.. Handle  the rest

     }
php getcsv函数负责分隔符和跟踪存储模块,省去了这些麻烦

以下代码段:

   $line = '"bonita","FL","212025920","2012929","Hooker,Bill"';
   $array = str_getcsv($line, ",", '"');
   print_r($array);
产出:

   Array ( [0] => bonita [1] => FL [2] => 212025920 [3] => 2012929 [4] => Hooker,Bill )

将函数重写为:

     foreach(explode($lineseparator,$csvcontent) as $line) {

        $lines++;
        $line = trim($line," \t");
        $line = str_replace("\r","",$line);

        $lineArray = str_getcsv($line, ",", '"');
        $linemysql = implode("','",$lineArray);
         $query = "insert ignore into $databasetable values('$linemysql');";
        //.. Handle  the rest

     }
php getcsv函数负责分隔符和跟踪存储模块,省去了这些麻烦

以下代码段:

   $line = '"bonita","FL","212025920","2012929","Hooker,Bill"';
   $array = str_getcsv($line, ",", '"');
   print_r($array);
产出:

   Array ( [0] => bonita [1] => FL [2] => 212025920 [3] => 2012929 [4] => Hooker,Bill )

如果在PHP()中使用现有的fgetcsv()函数与其试着自己写,你的生活会轻松得多。你有一个示例代码片段吗?我对fgetcsv一点都不熟悉。我链接的PHP手册页面显示examples@mark加上一个注释是因为这是一个很好的“答案”。答案。如果您在PHP()中使用了现有的fgetcsv()函数与其试着自己写,你的生活会轻松得多。你有一个示例代码片段吗?我对fgetcsv一点都不熟悉。我链接的PHP手册页面显示examples@mark加上一个注释是因为这是一个很好的“答案”。答案。那么用加载数据替换$query插入?你能提供准确的答案吗ntax以便我可以试用?那么用加载数据替换$query insert?您能提供准确的语法以便我可以试用吗?有没有办法使用以“,”结尾的字段?在现有insert中有没有办法使用以“\n”结尾的行?有没有办法使用以“,”结尾的字段“'行在现有插入中以'\n'终止?我已替换为该行,但收到500服务器错误?foreach(explode($lineseparator,$csvcontent)为$line){$lines++;$line=trim($line,“\t”);$line=str\u replace(“\r”,”,“,$line);$array=str\u getcsv($line,”,“,”);$linearray=explode($fieldseparator,$line);$linemysql=introde(“,”,$linearray);$linemysql=str\u replace(“,”,“,”,$linemysql)ᜯᜯᜯᜯcode添加了$query=“insert ignore into$databasetable value(“$linemysql”);”;}您不需要行-$linearray=explode($fieldseparator,$line);再一次去掉那个。你有str_getcsv行中的线性阵列。我用它替换了它,但是得到了500服务器错误?foreach(explode($lineseparator,$csvcontent)为$line){$lines++;$line=trim($line,“\t”);$line=str\u replace(“\r”,”,“,$line);$array=str\u getcsv($line,”,“,”);$linearray=explode($fieldseparator,$line);$linemysql=introde(“,”,$linearray);$linemysql=str\u replace(“,”,“,”,$linemysql)ᜯᜯᜯᜯcode添加了$query=“insert ignore into$databasetable value(“$linemysql”);”;}您不需要行-$linearray=explode($fieldseparator,$line);再一次去掉那个。您在str_getcsv行中有lineArray。