将大型CSV文件上传到Mysql数据库

时间:2011-08-02 14:17:42

标签: php mysql csv

我想将大型CSV文档上传到mysql数据库中,任何人都可以帮助我,该表由10个字段组成,但我想上传到表中只有5个字段而没有标题。我希望在浏览器中使用php完成此操作

$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中的所有字段导入到数据库中的一个字段中,并且在我篡改代码后,它不会将其识别为CSV文件。

1 个答案:

答案 0 :(得分:3)

如果您具有相应的权限,则可以使用LOAD DATA INFILE命令直接在MySQL中执行此操作,请参阅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中直接执行那样高效)

编辑:我应该补充一点,你还没有提到你到目前为止所尝试的内容或你发现的困难;如果你特别坚持某些事情,而不仅仅是寻找如何去做的建议,请更新问题说出来。