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,
]) : [],
],

コメント