1

PHPでページを作成してアップロードし、アップロードしたcsvファイルのデータを複数のテーブルにインポートしたいと考えています。ここで検索してみましたが、csv から複数のテーブルにインポートするものが見つからないようです。ここで何か助けていただければ幸いです。ありがとうございました。

4

5 に答える 5

1

上記で提案された別のバリアントとして、CSV を行ごとに読み取り、各行をフィールドに分解できます。各フィールドは 1 つの変数に対応します。

$handle = fopen("/my/file.csv", "r"); // opening CSV file for reading
if ($handle) { // if file successfully opened
    while (($CSVrecord = fgets($handle, 4096)) !== false) { // iterating through each line of our CSV

        list($field1, $field2, $field3, $field4) = explode(',', $CSVrecord); // exploding CSV record (line) to the variables (fields)

        // and here you can easily compose SQL queries and map you data to the tables you need using simple variables

    }
    fclose($handle); // closing file handler
}
于 2012-07-24T21:05:27.530 に答える
1

PHPmyadmin にアクセスできる場合は、そこに CSV をアップロードできます。次に、目的の各テーブルにコピーする

于 2012-07-24T13:53:25.570 に答える
1

一部のデータが 1 つのテーブルに移動し、他のデータが別のテーブルに移動するというコメントに応えて、簡単な例を次に示します。

テーブル 1 には、名前、年齢、性別の 3 つのフィールドがあります。Table2 には、髪の色、靴のサイズの 2 つのフィールドがあります。したがって、CSV は次のようにレイアウトできます。

john smith,32,m,blonde,11
jane doe,29,f,red,4
anders anderson,56,m,grey,9

次のステップでは、関数fgetcsvを使用します。これにより、csv の各行が配列に分割され、それを使用して SQL ステートメントを作成できます。

if (($handle = fopen($mycsvfile, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        // this loops through each line of your csv, putting the values into array elements
        $sql1 = "INSERT INTO table1 (`name`, `age`, `sex`) values ('".$data[0]."', '".$data[1]."', '".$data[2]."')";
        $sql2 = "INSERT INTO table2 (`haircolour`, `shoesize`) values ('".$data[3]."', '".$data[4]."')";
    }
    fclose($handle);
}

これは検証などの SQL セキュリティを考慮していないことに注意してください。ただし、基本的にはこのように動作します。

于 2012-07-24T14:55:47.633 に答える
0
if (($handle = fopen($mycsvfile, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        // this loops through each line of your csv, putting the values into array elements
        $sql1 = "INSERT INTO table1 (`name`, `age`, `sex`) values ('".$data[0]."', '".$data[1]."', '".$data[2]."')";
        $sql2 = "INSERT INTO table2 (`haircolour`, `shoesize`) values ('".$data[3]."', '".$data[4]."')";
    }
    fclose($handle);
}

上記のコードでは、2 つの挿入クエリを使用しています。これらのクエリをどのように実行しますか?

于 2013-10-24T10:53:56.817 に答える
0

問題は、どのフィールドがどのテーブルに対応しているかを区別するように思えます。次のようなヘッダーを送信するとき

 table.field, table.field, table.field

ヘッダーを分割すると、すべてのテーブルとフィールドが取得されます。

それは行く方法でしょうか?

ではごきげんよう

ps:あなたのコメントのために...

csv ファイルには、フィールド名を含む最初の行があります/含めることができます。csv データを複数のテーブルにコピーする必要がある場合は、回避策を使用して、どのフィールドがどのテーブルに対応しているかを調べることができます。

 user.username, user.lastname, blog.comment, blog.title
 "sam"        , "Manson"     , "this is a comment", "and I am a title"

ここで、csv データを読み取るときに、最初の行で作業し、ドットでタイトルを分割して、使用されているテーブルとフィールドを確認します。

この方法を使用すると、csv データを複数のテーブルにコピーできます。

ただし、最初にコーディングする必要があります:(

フィールド名を分割するには

// only the first line for the fieldnames
$topfields = preg_split('/,|;|\t/')
foreach( $topfields as $t => $f ) {
   // t = tablename, f = field
}
于 2012-07-24T13:54:19.507 に答える