我正在尝试将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,",","'"));
CSV
文件有3条记录,看起来是正确的。该过程在一定程度上起作用,但由于某种原因,它没有正确读取CSV
文件,结果查询是这样的:
REPLACE INTO `teacherNames` SET `schoolName` = 'Brooks', `teacherName` = 'RMG JMC PMC';
当我希望得到3个单独的查询时 - 每个记录一个。它似乎没有将CSV
文件作为3个单独的记录读取,而是作为1.任何人都可以看到原因吗?
更新:
CSV内容为:
RMG
JMC
PMC
答案 0 :(得分:2)
如果你的文件与MySQL服务器在同一台计算机上,那么Julio Martins的修补程序会更好。
但是如果你需要从PHP内部读取文件,PHP.NET会在http://php.net/manual/en/function.fgetcsv.php上提供一条说明:
注意:如果PHP在阅读时没有正确识别行结尾 Macintosh计算机上或由Macintosh计算机创建的文件,启用 auto_detect_line_endings运行时配置选项可能会有所帮助 解决问题。
你的文件中的行结尾怎么样?由于所有的行都被读作一个,我猜你可能就是这样。
要启用auto_detect_line_endings,请在http://php.net/manual/en/filesystem.configuration.php#107333
使用ini_set("auto_detect_line_endings", true);
作为所述开心果
答案 1 :(得分:1)
使用while而不是do-while:
while ($data = fgetcsv($handle,1000,",","'")) {
//...
}
答案 2 :(得分:1)
尝试加载数据:
LOAD DATA INFILE '{$filepath}'
INTO TABLE '{$table}'
FIELDS TERMINATED BY ','
更干净