1

もともと、私の質問は、PhpMyAdmin の SQL セクションが正しく機能していなかったという事実に関連していました。コメントで示唆されているように、入力の量が処理できないことに気付きました。ただし、これでは、(CSV) の形式のファイル (私の場合は 35,000 レコード行) を処理する方法の有効な解決策が得られませんでした。

...
20120509,126,1590.6,0
20120509,127,1590.7,1
20120509,129,1590.7,6
...

PhpMyadmin のインポート オプションは、SQL セクションの基本的なコピー アンド ペースト入力と同じように苦労しています。今回も前回同様、最大実行時間まで5分かかって停止。興味深いのは、テーブルに 6 ~ 7,000 のレコードを追加することです。つまり、入力が実際に通過し、ほぼ成功することを意味します。また、ファイル内のデータ量を半分にしてみました。しかし、何も変わっていません。

今明らかに何かがおかしい。単純なデータのインポートが機能しないときに、php スクリプトでデータをいじる必要があるのはかなり面倒です。

4

1 に答える 1

4

PHP アップロードの最大サイズを変更します。

php.ini ファイルがどこにあるか知っていますか?

まず、このファイルを Web ルートに配置してみてください。

phpinfo.php

( http://php.net/manual/en/function.phpinfo.phpを参照)

含む:

<?php

phpinfo();

?>

次に、http://www.yoursite.com/phpinfo.phpに移動します。

「php.ini」を探します。

大きなファイルをアップロードするには、max_execution_time、post_max_size、upload_max_filesize が必要です

また、error.log ファイルがどこにあるか知っていますか? うまくいけば、何がうまくいかないかについての手がかりを与えるでしょう.

編集:

ファイルのインポートに使用するクエリは次のとおりです。

$query = "LOAD DATA LOCAL INFILE '$file_name' INTO TABLE `$table_name` FIELDS TERMINATED BY ',' OPTIONALLY
    ENCLOSED BY '\"' LINES TERMINATED BY '$nl'";

$file_name は PHP グローバル変数 $_FILES からの一時ファイル名、$table_name は既にインポート用に準備されたテーブル、$nl は csv 行末の変数です (デフォルトでは Windows 行末ですが、Linux 行を選択するオプションがありますエンディング)。

もう 1 つのことは、スクリプトのテーブル ($table_name) は、最初に csv をスキャンして列の種類を決定することによって事前に準備されていることです。適切な列タイプを決定した後、データを受け取る MySQL テーブルを作成します。

最初に MySQL テーブル定義を作成して、ファイルの内容 (データ型、文字の長さなど) を一致させることをお勧めします。次に、上記のクエリを試して、実行速度を確認してください。MySQL テーブル定義が速度にどの程度影響しているかはわかりません。

また、データがロードされるまで、テーブルにインデックスが定義されていません。インデックスはデータの読み込みを遅くします。

于 2012-05-13T04:45:35.620 に答える