2012-09-04 8 views
0

내 TEX/csv 파일은 3 열 first_name, last_nameaddress을 가지고 있지만 내 데이터베이스 테이블은 두 개의 열 first_namelast_name 있습니다. 나는 심지어 테이블에 존재하지 않는 많은 열이 csv에 있다는 함수를 갖고 싶습니다. 테이블에 여전히 올바른 열을 선택하고 테이블에 삽입 할 수 있습니다. 어떤 사람은 PHP mysql_fetch_field을 사용하여 조언합니다. mysql_fetch_field을 시도하고 데이터베이스 테이블 열 이름을 수집 할 수 있지만 테이블 헤더에 따라 데이터를 삽입 할 수 없습니다.수입 TXT/CSV 데이터

 set_time_limit(0); 

    include "connection.php"; //Connect to Database 


    if (isset($_POST['submit'])) { 

    // Gel table current column name 

    $query = "select * from month"; 
    $result=mysql_query($query) or die (mysql_error()); 

    $i = 0; 
    while ($i < mysql_num_fields($result)) { 
     $meta = mysql_fetch_field($result, $i); 

     $a=$meta->name; 

     $i++; 
    } 

    //Upload File 

    if (is_uploaded_file($_FILES['filename']['tmp_name'])) { 
      echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>"; 
      echo "<h2>Displaying contents:</h2>"; 
      readfile($_FILES['filename']['tmp_name']); 
     } 

     //Import uploaded file to Database 
     $handle = fopen($_FILES['filename']['tmp_name'], "r"); 

      $header = fgetcsv($handle); 


     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
      $import="INSERT into month($header[0],$header[1]) values('$data[0]','$data[1]')"; 

      mysql_query($import) or die(mysql_error()); 
     } 

     fclose($handle); 

     echo "Import done"; 

    } 
+0

'mysql_ *'은 더 이상 사용되지 않으므로'PDO' 나'mysqli_ * '로 바꾸지 마십시오. 또한 [here 's] (http://stackoverflow.com/questions/10478861/importing-multiple-csv-files-to-mysql-tables) 유용 할 수도있는 PDO를 사용하는'LOAD LOCAL INFILE'의 예제 –

답변

0

나는 당신이 필요로하는 것을 얻을 확실하지 않다하지만 난 당신과 같이 그 CSV을로드 MySQL Load Data Infile를 사용한다고 생각 :

LOAD DATA LOCAL INFILE 'your_file.csv' 
INTO TABLE your_table 
FIELDS TERMINATED BY ';' 
LINES TERMINATED BY '\r\n' 
(field1, field2, field3) 

이것이 내가 CSV과 어떻게 작동 하는지를 잘 보여줍니다.

확인하십시오. link.

0

MySQL의 LOAD DATA INFILE 명령을 사용할 수 있습니다. 매뉴얼에 설명 된대로 : 귀하의 경우,

LOAD DATA INFILE 'file.txt' 
    INTO TABLE t1 
    (column1, @dummy, column2, @dummy, column3);

따라서 :

또한 사용자 변수에 할당하고 테이블 컬럼에 변수를 할당하지 않음으로써 입력 값을 삭제할 수 있습니다 :

LOAD DATA INFILE '/path/to/file' INTO TABLE month 
    FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
    IGNORE 1 LINES 
    (first_name, last_name, @dummy);