2011-08-02 118 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

大道更新我的問題任何更好的出路? –

相關問題