需要添加额外的行以跳过带有csv文件标题的第一行。但我不知道从哪里开始。
<?php
if(isset($_POST["submit"]))
{
$host="localhost"; // Host name.
$db_user="root"; //mysql user
$db_password=""; //mysql pass
$db='local'; // Database name.
$conn=mysql_connect($host,$db_user,$db_password) or die (mysql_error());
mysql_select_db($db) or die (mysql_error());
echo $filename=$_FILES["file"]["name"];
$ext=substr($filename,strrpos($filename,"."),(strlen($filename)-strrpos($filename,".")));
$file = fopen($filename, "r");
$handle = fopen("$filename", "r");
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE)
{
$import="INSERT into customers(fname,lname,company,address,city,state,country,postal_code,phone,email) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]')";
mysql_query($import) or die(mysql_error());
}
fclose($handle);
print "Import done";
}
else
{
print "<form enctype='multipart/form-data' method='post'>";
print "Type file name to import:";
print "<input type='file' name='file' id='file'>";
print "<input type='submit' name='submit' value='submit'></form>";
}
?>
任何帮助都是相关的。
答案 0 :(得分:10)
考虑使用SplFileObject
到read CSV files,它更好地支持迭代,例如结合标准SPL LimitIterator
,这是小菜一碟:
$file = new SplFileObject($filename);
$file->setFlags(SplFileObject::READ_CSV);
$it = new LimitIterator($file, 1);
foreach($it as $data) {
$mask = "INSERT INTO customers (fname, lname, company, address, city, state, country, postal_code, phone, email) values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')";
$sql = vsprintf($mask, $data);
mysql_query($sql) or die(mysql_error());
}
另外请注意:
Please, don't use
mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
答案 1 :(得分:2)
fgetcsv($handle, 100000, ",")
$file = fopen($filename, "r");
$handle = fopen("$filename", "r");
$headers = fgetcsv($handle, 100000, ","); //gran headers,
// you can do additional check to see if headers are grabbed or is the exist or if it is first lien of data (depends if you are 100% sure that headers will exist)
//and if they are not, reset the handle
// rewind($handle);
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE)
{
$import="INSERT into customers(fname,lname,company,address,city,state,country,postal_code,phone,email) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]')";
mysql_query($import) or die(mysql_error());
}
fclose($handle);
print "Import done";
}
else
{
print "<form enctype='multipart/form-data' method='post'>";
print "Type file name to import:";
print "<input type='file' name='file' id='file'>";
print "<input type='submit' name='submit' value='submit'></form>";
}
答案 2 :(得分:0)
简单计数可以正常工作
$count = 0;
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE)
{
if($count)
{
$import="INSERT into customers(fname,lname,company,address,city,state,country,postal_code,phone,email) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]')";
mysql_query($import) or die(mysql_error());
}
$count++;
}