使用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中正确检测行尾。如果他可以使用此查询,这确实更好。但是他使用,
作为行的字段分隔符,而行(您的代码使用;
)必须读取所有行(您的代码忽略第一行)。琐碎的,但把它固定在问题需要上不会有什么坏处。如果他能使用这个查询,它确实会更好。但是他使用,
作为行的字段分隔符,而行(您的代码使用;
)必须读取所有行(您的代码忽略第一行)。琐碎的,但把它固定在需要的问题上不会有什么坏处。那太棒了——就是工作。非常感谢。加上那句话,一切都很好。那太棒了——就是工作。非常感谢。加上那句话,一切都很好。