2017-02-14 12 views
0

データベースにcsvファイルをインポートできるページを作成しようとしています。私は、インポートが機能するようになっている問題を抱えています。それは機会に働いていますが、明らかな理由がなくても動作を停止します。 dbへの手動入力を追加すると、スクリプトがdbに接続していることがわかりますが、truncateはデータベースをクリアしますが、データはインポートされません。私はcsvの各列を反映するように列を設定したdbテーブルを持っています。誰でもこの問題のトラブルシューティングを手伝ってください。ここに私のコードです。csvファイルをデータベースにインポート

DB-config.phpの

<?php 
    define('_DB_HOST_NAME','localhost'); 
    define('_DB_USER_NAME','root'); 
    define('_DB_PASSWORD',''); 
    define('_DB_DATABASE_NAME','stock_planner'); 

    $dbConnection = mysqli_connect(_DB_HOST_NAME,_DB_USER_NAME,_DB_PASSWORD,_DB_DATABASE_NAME); 

?> 

のindex.php

<?php 
    if(isset($_POST['submit'])){ 
     include_once 'db-config.php'; 
     if (!$dbConnection) 
     { 
      print "<h1>Unable to connect to the database, contact your administrator!</h1>"; 
     } 
     else 
     { 
     $truncate = "TRUNCATE TABLE stock_sales_report"; 
     $file = $_FILES['csv_stock']['name']; 
     $import = "LOAD DATA LOCAL INFILE '$file' 
       INTO TABLE stock_sales_report 
       FIELDS TERMINATED BY ',' 
       OPTIONALLY ENCLOSED BY '\"' 
       LINES TERMINATED BY '\n' 
       IGNORE 1 LINES;"; 
     mysqli_query($dbConnection,$truncate); 
     mysqli_query($dbConnection,$import); 
     print "<h1>successfully imported.</h1>"; 
     } 
    } 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Planner</title> 
</head> 
<body> 
    <form method='POST' enctype='multipart/form-data'> 
     Upload CSV: <input type='file' name='csv_stock' /> <input type='submit' name='submit' value='import' /> 
    </form> 
</body> 
</html> 
+2

エラーが発生しますか? – Ibu

+0

これは '$ _FILES'の一時的な性質と関係があります:http://www.phpforkids.com/php/php-forms-file-uploads.php。アップロードのために 'isset'とは別にこれらのチェックを実行しますか? http://www.phpforkids.com/php/php-forms-file-uploads.php –

答えて

0

データベースにFILE権限を持つアカウントで接続する必要がありまず。 (https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_file)FILE特権は、特定のデータベースだけでなく、サーバーレベルで付与されます。

第2に、ファイルが実行中のスクリプトと同じディレクトリにアップロードされていない場合、ファイルのフルパスをコマンドに送信する必要があります。

+0

私は、私が無効にした不正なフォルダの場所から私のファイルを受け入れない、--secure-file-privの問題がありました。 その後、csvの値が空白のINTカラムでインポートが停止しました.SQLクエリを修正してINTカラムの空白値を0に変更しました。 私が今ヒットした問題は、インポートがCSVで表示されているutf8以外の文字に固執していることです。データベースをCollat​​ionからLatin1に設定してOKをインポートすることで回避できますが、私は、インポートする前にCSVからこれらの16進文字を取り除く方法が必要だと思います。これについて最善の方法は何でしょうか? –

+0

UTF-8はすべてのキャラクタセットをカバーする必要があります。データベースの照合と接続が一致していない可能性があります。 – databyss

関連する問題