0

tex / csvファイルには3つの列first_namelast_nameありaddress ますが、データベーステーブルには2つの列first_nameとがありlast_nameます。テーブルに存在しない列がたくさんあるcsv場合でも、適切な列を選択してテーブルに挿入できる関数が必要です。誰かがphpを使って私にアドバイスしますmysql_fetch_field。データベーステーブルの列名を収集しようmysql_fetch_fieldとしていますが、テーブルヘッダーに従ってデータを挿入できません。

     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";

    }
4

2 に答える 2

0

MySQLのLOAD DATA INFILEコマンドを使用できます。マニュアルに記載されているように:

入力値をユーザー変数に割り当て、変数をテーブル列に割り当てないことで、入力値を破棄することもできます。

LOAD DATA INFILE'file.txt'
  表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);
于 2012-09-04T11:28:59.193 に答える
0

必要なものが得られるかどうかはわかりませんが、次のようMySQL Load Data Infileにロードするために使用する必要があると思います。CSV

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

それが私が一緒に仕事をする方法でCSVあり、それはかなりうまく仕事をします。

このリンクを確認してください。

于 2012-09-04T11:29:01.013 に答える