2016-09-11 14 views
2

phpを使ってMySQLにcsvをインポートする方法はありますか?phpでMySQLにcsvファイルをインポートするには?

エラーメッセージを生成しない次のコードを含むImportData.phpファイルがあります。 ImportData.phpabc.csvは、Webサーバー上の同じフォルダーにあり、MySQLは別のサーバー上にあります。

LOAD DATA LOCAL INFILEが動作しない場合は、他にどのような方法でPHPをインポートできますか?私はその仕事でクローンを設定したい。

$sql = "LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE tbl_test 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES"; 
+0

'LOCAL INFILE'とその他のserver_はファイルがマシーンの上にあれば動作しません – JOUM

+0

OK @Olaf Dietscheはより良い点を作っています:)設定! – JOUM

+0

"動作しません"というエラーメッセージも意味のある診断でもありません。どのようなエラーが出ますか? – symcbean

答えて

0

このLOAD DATA INFILE Syntax

LOCALキーワードについて、MySQLのマニュアルを参照してください。後述するように、予想されるファイルの場所とエラー処理に影響を与えます。 LOCALは、サーバーとクライアントの両方が許可するように構成されている場合にのみ機能します。たとえば、mysqldが--local-infile = 0で起動された場合、LOCALは機能しません。 7.1.6項「Security Issues with LOAD DATA LOCAL」を参照してください。

したがって、許可されている場合は、まずMySQLの設定を確認する必要があります。


代替は、CSVファイルを自分で解析し、INSERT INTO文で行ずつ、それをインポートすることができます。あなたの質問に関連

1

、我々はそれを解決するために、いくつかのパスを持って幸せだ:

1は、LOAD DATA INFILE

あなたは直接CSVファイルをインポートすることができます偉大なMySQLの機能、単一のクエリで。

あなたがここには、LOAD DATA INFILEである

マニュアルページを探しているSQLコマンド:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

クイック例:

LOAD DATA INFILE 'fileName' 
    INTO TABLE tableName 
    FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\n' 
    (
    field1, 
    field2, 
    field3, 
    @variable1, 
    @variable2, 
    etc 
    )   
    set 
    (
    field4 = concat(@variable1,@variable2) 
    ); 

かなり基本的な例ですが、それはのほとんどをカバーあなたが欲しいもの。マニュアルページには、非常に複雑な作業を行う方法の詳細が記載されています。

** 2。 CSVを解析してプログラム的に挿入する**

set_time_limit(10000); 


    $con = new mysqli("example.com", "user", "password", "database"); 
    if (mysqli_connect_errno()) { 
    trigger_error('Database connection failed: ' . mysqli_connect_error(), E_USER_ERROR);} 


    $fp = fopen("file.csv", "r"); 

    while(!feof($fp)) { 
     if(!$line = fgetcsv($fp, 1000, ';', '"')) { 
     continue; 
     } 

     $importSQL = "INSERT INTO table_name    VALUES('".$line[0]."','".$line[1]."','".$line[2]."')"; 

     $qry = $con->query(($importSQL) ; 

     if($qry === false) { 
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ ERROR); 
    } 

    } 

    fclose($fp); 

希望するものがあります。

+0

あなたが実際に提案していることに対して私は助言します。mysql_ *拡張子は[現在推奨されていません](http://php.net/manual/en/intro.mysql.php)です。新しいコードを書く必要はありません。さらに、OPは明らかにLOAD DATA INFILEについて知っていますが、実際に特定のキーワードを使用して特定のニーズを実行します。この具体的なニーズが満たされないようにすることで、実際にはソリューションが悪化します。 –

0

CSVを解析し、それをプログラム的に挿入するコードを実行することで、動作するようになりました。フィールドヘッダーなので、1行目をインポートしない方法はありますか?

ありがとうございました。

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。自分の投稿にいつでもコメントすることができます。また、十分な評判を得ると、投稿にコメントすることができます。関連しているが異なる質問がある場合は、文脈を提供するのに役立つ場合は、この質問を参照する新しい質問をしてください。 –

関連する問題