sql >> データベース >  >> RDS >> Mysql

csvデータをmysqlにインポートするためのPHPスクリプト

    いくつかのヒント:

    • 廃止されたext/mysqlを使用しないでください 、ext/mysqliまたはPDOを使用できる場合。

    • csvファイル全体をPHP変数に読み込まないでください。ファイルが500MBの場合はどうなりますか?

    • 組み込み関数 fgetcsv()> 。

    • 準備されたステートメント

    • 外部ファイルのデータをSQLステートメントに補間しないでください。これには、SQLインジェクション のリスクがあります。 信頼できないユーザー入力を補間する場合と同じように、脆弱性。

    • MySQLのデータ入力の読み込み 指図。行ごとに挿入するよりも20倍高速です。

    より簡単な解決策は次のとおりです。

    <?php
    $databasehost = "localhost"; 
    $databasename = "test"; 
    $databasetable = "sample"; 
    $databaseusername="test"; 
    $databasepassword = ""; 
    $fieldseparator = ","; 
    $lineseparator = "\n";
    $csvfile = "filename.csv";
    
    if(!file_exists($csvfile)) {
        die("File not found. Make sure you specified the correct path.");
    }
    
    try {
        $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
            $databaseusername, $databasepassword,
            array(
                PDO::MYSQL_ATTR_LOCAL_INFILE => true,
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
            )
        );
    } catch (PDOException $e) {
        die("database connection failed: ".$e->getMessage());
    }
    
    $affectedRows = $pdo->exec("
        LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
          FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
          LINES TERMINATED BY ".$pdo->quote($lineseparator));
    
    echo "Loaded a total of $affectedRows records from this csv file.\n";
    
    ?>
    

    これをMacでPHP5.3.26でテストし、LinuxでMySQL5.6.14に接続しました。



    1. データベース内の各テーブルにmysqlクエリを適用します

    2. 解決済み:MicrosoftOffice365バージョン2009はデータベースアプリケーションを破壊する可能性があります

    3. JDBC-ステートメント、PreparedStatement、CallableStatementおよびキャッシング

    4. Pythondatetime.datetimeオブジェクトをMySQLに挿入する