Laravelで、mysqlにCSVファイルをインポートしようとしたら
エラーになったので、そのときの対応をメモメモ
CSVの読み込みはこんな感じ
DB::statement('LOAD DATA LOCAL INFILE "/tmp/sample.csv" INTO TABLE sampleTable FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\'');
そうすると
こんなエラーや
string(420) “SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
こんなエラーで怒られる、、、
PDO::exec(): LOAD DATA LOCAL INFILE forbidden
コンソール画面から直接SQLを実行するといけるのに
config/database.php に
下記2行を追加してあげたらうまくいった
PDO::ATTR_EMULATE_PREPARES => true,
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', 'xxx.xxx.xxx.xxx'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'xxxxx'), 'username' => env('DB_USERNAME', 'xxxxx'), 'password' => env('DB_PASSWORD', 'xxxxx'), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), PDO::ATTR_EMULATE_PREPARES => true, PDO::MYSQL_ATTR_LOCAL_INFILE => true, ]) : [], ],
コメント