2011-08-02 127 views
1

我想上传大量的CSV文件到MySQL数据库任何人都可以帮助我,表格由10个字段组成,但我只想上传到表格中没有标题的5个字段。我想这跟做PHP在浏览器将大型CSV文件上传到Mysql数据库

$filename = $_FILES['sel_file']['tmp_name']; 
<?php 
    if($_FILES["file"]["type"] != "application/vnd.ms-excel"){ 
     die("This is not a CSV file."); 
    } 
    elseif(is_uploaded_file($_FILES['file']['name'])){ 
    $dbhost = 'localhost'; 
    $dbuser = 'root'; 
    $dbpass = ''; 
    $dbname = 'cbt_software'; 
    $link = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error  connecting to mysql server'); 
    mysql_select_db('cbt_software') or die(mysql_error()); 
    //Process the CSV file 
    $handle = fopen($_FILES['file']['name'], "r"); 
    $data = fgetcsv($handle, 1000, ";"); 
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { 
     $att0 = mysql_real_escape_string($data[0]); 
     $att1 = mysql_real_escape_string($data[1]); 
     $att2 = mysql_real_escape_string($data[2]); 
     $att3 = mysql_real_escape_string($data[3]); 
     $att4 = mysql_real_escape_string($data[4]); 

     $sql = "INSERT INTO `course_reg` (`coursecode`,`coursename`,`coursedescription`,`coursemaster`,`courselevel`)VALUES  ('$att0','$att1','$att2','$att3','$att4')"; 
     mysql_query($sql) or die(mysql_error()); 
    } 
    mysql_close($link); 
    echo "CSV file successfully imported."; 
} 
else{ 
    die("You shouldn't be here"); 
} 
?> 

起初,这导入所有字段从CSV到数据库只是一个场后,我的代码篡改它不recognicing它是个CSV文件。

+0

看来你正在测试上传的文件是否是Excel电子表格,而不是CSV文件。要么跳过该检查,要么检查以“.csv”结尾的文件名(当然,这并不意味着它确实是一个CSV文件)。 –

+0

另外,您还没有检查到fopen()调用成功。 –

+0

此外,它看起来像你正在看错文件名 - $ _FILES ['文件'] ['名称']是客户端提供的名称,你需要$ _FILES ['文件'] ['tmp_name']为上传的临时文件的文件名是作为服务器存储的。 (将'文件'改为文件输入框的名称。) –

回答

3

如果您有相应的权限,你可以这样直接在MySQL与LOAD DATA INFILE命令做,看到http://dev.mysql.com/doc/refman/4.1/en/load-data.htmlmysqlimport实用,看到http://dev.mysql.com/doc/refman/4.1/en/mysqlimport.html

这两种方法都可以让你指定数据应该在哪些列,例如:

LOAD DATA INFILE 'myfile.txt' INTO TABLE 'mytable' (col1, col2, col3, ...)

mysqlimport --columns='col1,col2,...' tablename.csv

如果您打算从PHP执行此操作,您应该能够读取CSV文件的每一行并执行适当的SQL INSERT查询来命名相应的列(尽管这样做效率不如直接在MySQL中执行)。

编辑:我应该补充说,你还没有提到你到目前为止所尝试过的或者你发现的困难;如果你陷入特别的困境,而不是仅仅寻找如何去做的建议,请更新问题来说明。

+0

我需要它在PHP请 –

+2

好吧,那么你有什么尝试?你有什么问题?或者你只是想用勺子喂代码? –

+0

大道更新我的问题任何更好的出路? –