0

csv ファイルを mysql データベースにインポートする次のスクリプトを作成しています。ユーザーは最初にログインする必要があり、アップロードするためのセキュリティ権限は別のファイルによってチェックされます。これが true と評価された場合、ファイル アップローダーによってファイルをアップロードできます。ファイルをインポートします。

以下の正しいコードを使用していますか?また、csv レイアウトが間違っている場合、インポートを拒否できますか?、csv が正しくフォーマットされている場合、これがひどく間違っている可能性があることを心配しています。この機能は、このプロジェクトの要件として要求されているため、可能な限りバカであることを証明しようとしています。

<?php
$uploadedcsv = './uploads/'.$filename.'';
$sql = 'LOAD DATA LOCAL INFILE "'.$uploadedcsv.'" INTO TABLE '.$table.' FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" IGNORE 1 LINES' or die(mysql_error());
?>
4

2 に答える 2

2

ユーザーに 100% 依存していて、そうではないと思われる場合を除き、アップロードされたファイルをやみくもにインポートするのではなく、最初にそれが正しいかどうかを確認することをお勧めします。

これを行うには、ファイルを開いて読み取る必要があります。たとえば、fgetcsvと を使用して、データの一貫性を行ごとにチェックします。


ウェブ上で多くの例を見つけることができます。

ここにいくつかあります:

于 2012-01-14T00:55:35.653 に答える
0

これは MySQL 経由で実行できますが、デフォルトで LOAD DATA INFILE は CSV とは異なる形式を想定しています。ドキュメントから:

If you specify no FIELDS or LINES clause, the defaults are the same as if you had written this:

FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n' STARTING BY ''

ドキュメントには、CSV ファイルを扱う場合の注意事項が記載されています。

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

これは、"" で囲まれ、\r\n で行区切りされたコンマ区切りの値を処理する例です。

これを使用してファイルをインポートするには、ステートメントがアップロード ファイルの CSV 形式と一致していることを確認してください。この方法でインポートできます。

于 2012-01-14T01:01:53.843 に答える