我使用以下脚本从CSV文件将数据导入我的mysql数据库。 CSV的设置如下:
Name Postcode
fred hd435hg
bob dh345fj
上面是它在excel中的样子,在记事本中看到的原始csv格式看起来像这样:
name,postcode
frank,ng435tj
我遇到的问题是由于某种原因邮政编码列根本没有导入,标题行也被导入作为记录,是否可以跳过第一行?我已经完成了代码并且无法理解为什么邮政编码没有被提取,这很奇怪。
<?php
//database connect info here
//check for file upload
if(isset($_FILES['csv_file']) && is_uploaded_file($_FILES['csv_file']['tmp_name'])){
//upload directory
$upload_dir = "./csv";
//create file name
$file_path = $upload_dir . $_FILES['csv_file']['name'];
//move uploaded file to upload dir
if (!move_uploaded_file($_FILES['csv_file']['tmp_name'], $file_path)) {
//error moving upload file
echo "Error moving file upload";
}
//open the csv file for reading
$handle = fopen($file_path, 'r');
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
//Access field data in $data array ex.
$name = $data[0];
$postcode = $data[1];
//Use data to insert into db
$sql = sprintf("INSERT INTO test (name, postcode) VALUES ('%s',%d)",
mysql_real_escape_string($name),
$postcode
);
mysql_query($sql) or (mysql_query("ROLLBACK") and die(mysql_error() . " - $sql"));
}
//delete csv file
unlink($file_path);
}
?>
答案 0 :(得分:2)
您的CSV文件实际上似乎是TSV文件。它不使用逗号,而是使用制表符来分隔字段。
因此您需要更改fgetcsv
来电。而不是','
使用标签:
while (($data = fgetcsv($handle, 1000, "\t") ...
要跳过标题行,请在while块之前添加另一个人造fgetcsv
:
fgetcsv($handle);
while (...) {
那将跳过第一行。 (一个简单的fgets
也可以。)
哦,刚刚注意到:邮政编码可能也会被删除,因为你将{1}} sprintf
占位符%d
连接到字符串中为$postcode
。如果该字段实际上包含字母,就像在您的示例中那样,则不起作用。 - 虽然我认为打印输出只是一个错误的例子。
答案 1 :(得分:0)
试试这个。
$file = $_FILES['file']['tmp_name'];
$handle = fopen($file,"r");
while(($fileop = fgetcsv($handle,1000,",")) !==false)
{
$username = $fileop[0];
$name = $fileop[1];
$address = $fileop[2];
$sql = mysql_query("INSERT INTO ...... ");
}