Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将CSV文件导入SQL无效_Php_Mysql_Sql_Csv - Fatal编程技术网

使用PHP将CSV文件导入SQL无效

使用PHP将CSV文件导入SQL无效,php,mysql,sql,csv,Php,Mysql,Sql,Csv,我正在尝试将CSV文件导入我的SQL数据库。这就是我所拥有的: if ($_FILES[csvFile][size] > 0) { $file = $_FILES[csvFile][tmp_name]; $handle = fopen($file,"r"); do { if ($data[0]) { $insert_query = "REPLACE INTO `teacherNames` SET `schoolName` = '".adds

我正在尝试将
CSV
文件导入我的
SQL
数据库。这就是我所拥有的:

if ($_FILES[csvFile][size] > 0)
{ 
$file = $_FILES[csvFile][tmp_name]; 
$handle = fopen($file,"r"); 

do { 
    if ($data[0]) 
    { 

    $insert_query = "REPLACE INTO `teacherNames` SET 
    `schoolName` = '".addslashes($schoolname)."',
    `teacherName` = '".addslashes($data[0])."'
    ;";  

        $result = mysql_query($insert_query);
        echo $insert_query; -- SEE RESULTING QUERY BELOW
        echo $data[0]." added\n<br />";
    } 
} 
while ($data = fgetcsv($handle,1000,",","'"));
当我希望得到3个独立的查询时-每个记录一个查询。它似乎不是将
CSV
文件作为3个单独的记录读取,而是作为1读取。有人知道为什么吗

更新:

CSV内容包括:

RMG
JMC
PMC

使用while代替do while:

while ($data = fgetcsv($handle,1000,",","'")) {
    //...
}

使用while代替do while:

while ($data = fgetcsv($handle,1000,",","'")) {
    //...
}
尝试加载数据:

LOAD DATA INFILE '{$filepath}'
INTO TABLE '{$table}'
FIELDS TERMINATED BY ','
它更干净

尝试加载数据:

LOAD DATA INFILE '{$filepath}'
INTO TABLE '{$table}'
FIELDS TERMINATED BY ','

更干净

如果您将文件与MySQL服务器放在同一台计算机上,那么Julio Martins的anwer会更好

但是,如果您需要从PHP内部读取该文件,则PHP.NET中有一条注释:

注意:如果PHP在阅读时没有正确识别行尾 Macintosh计算机上或由Macintosh计算机创建的文件,使 自动检测行结束运行时配置选项可能会有所帮助 解决问题

文件中的行尾如何?由于所有的行都被解读为一行,我想这可能是你的情况


要启用自动检测行结束,请使用
ini\u set(“自动检测行结束”,true)
正如开心果在

上所说的,如果您将文件与MySQL服务器放在同一台计算机上,那么Julio Martins的anwer会更好

但是,如果您需要从PHP内部读取该文件,则PHP.NET中有一条注释:

注意:如果PHP在阅读时没有正确识别行尾 Macintosh计算机上或由Macintosh计算机创建的文件,使 自动检测行结束运行时配置选项可能会有所帮助 解决问题

文件中的行尾如何?由于所有的行都被解读为一行,我想这可能是你的情况



要启用自动检测行结束,请使用
ini\u set(“自动检测行结束”,true)
如前所述,开心果的csv内容也会有所帮助:)
$data
在第一次通过循环时将为空,因为您使用的是do/while-表达式的
while
部分要经过一次完整的循环才会计算。csv实际上是用逗号分隔的??您可以打开该文件,然后分解“;”@JulioMarins确实存在CSV问题。我在Excel(Mac)中创建了它,然后复制了它。新副本不起作用,但在Excel和文本编辑器中看起来相同。奇怪,你为什么要用替换?是(schoolName,teachername)主键吗?csv内容也会有帮助:)
$data
在第一次通过循环时将为空,因为您使用的是do/while-表达式的
while
部分在整个循环中只有一次时才会计算。csv实际上是用逗号分隔的??您可以打开该文件,然后分解“;”@JulioMarins确实存在CSV问题。我在Excel(Mac)中创建了它,然后复制了它。新副本不起作用,但在Excel和文本编辑器中看起来相同。奇怪,你为什么要用替换?(schoolName,teachername)是主键吗?谢谢,但这也是主键。它似乎与CSV文件本身有关。如果我再创建一次,它似乎会起作用。可能是Mac Excel之类的东西。看看CSV文件的换行符。有什么方法可以判断吗?看看这个:“在Mac上,Excel生成的CSV文件的行尾不正确,这会导致git出现问题(除其他外)。”有可能,fgetcsv()无法从您的CSV中正确检测行尾。谢谢,但这与CSV文件本身有关。如果我再创建一次,它似乎会起作用。可能是Mac Excel之类的东西。看看CSV文件的换行符。有什么方法可以判断吗?看看这个:“在Mac上,Excel生成的CSV文件的行尾不正确,这会导致git出现问题(除其他外)。”有可能,fgetcsv()无法从您的CSV中正确检测行尾。如果他可以使用此查询,这确实更好。但是他使用
作为
行的字段分隔符,而
行(您的代码使用
)必须读取所有行(您的代码忽略第一行)。琐碎的,但把它固定在问题需要上不会有什么坏处。如果他能使用这个查询,它确实会更好。但是他使用
作为
行的字段分隔符,而
行(您的代码使用
)必须读取所有行(您的代码忽略第一行)。琐碎的,但把它固定在需要的问题上不会有什么坏处。那太棒了——就是工作。非常感谢。加上那句话,一切都很好。那太棒了——就是工作。非常感谢。加上那句话,一切都很好。