私はPHPで常にMySQLクエリを使用していますが、試してみると
LOAD DATA INFILE
次のエラーが発生します
#1045-ユーザー'user' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)
これが何を意味するのか誰か知っていますか?
私はPHPで常にMySQLクエリを使用していますが、試してみると
LOAD DATA INFILE
次のエラーが発生します
#1045-ユーザー'user' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)
これが何を意味するのか誰か知っていますか?
私もこの問題に遭遇しました。LOCAL
SQL ステートメントに追加する必要がありました。
たとえば、これによりパーミッションの問題が発生します。
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
ステートメントに追加LOCAL
すると、権限の問題は解消されます。そのようです:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
この問題がありました。私は周りを検索しましたが、満足のいく答えは見つかりませんでした。以下に検索結果をまとめます。
アクセス拒否エラーは、次のことを意味している可能性があります。
GRANT FILE on *.* to user@'localhost'
)。また、MySQL ユーザーに FILE 権限が付与されていることを確認します。
共有 Web ホスティングを使用している場合、ホスティング プロバイダーによってブロックされる可能性があります。
Lyon からの文字列は、非常に良いヒントを与えてくれました。Windows では、バックスラッシュではなくスラッシュを使用する必要があります。このコードは私のために働きます:
File tempFile = File.createTempFile(tableName, ".csv");
FileUtils.copyInputStreamToFile(data, tempFile);
JdbcTemplate template = new JdbcTemplate(dataSource);
String path = tempFile.getAbsolutePath().replace('\\', '/');
int rows = template.update(MessageFormat
.format("LOAD DATA LOCAL INFILE ''{0}'' INTO TABLE {1} FIELDS TERMINATED BY '',''",
path, tableName));
logger.info("imported {} rows into {}", rows, tableName);
tempFile.delete();
これは私にも起こり、ヤミールが彼の投稿で説明したすべての手順に従ったにもかかわらず、機能させることができませんでした.
ファイルは /tmp/test.csv にあり、アクセス許可は 777 でした。MySQL ユーザーにはファイル権限があり、MySQL バージョンでは LOCAL オプションが許可されていなかったため、行き詰まりました。
最後に、次を実行して問題を解決できました。
sudo chown mysql:mysql /tmp/test.csv
指定したパスワード'user'@'localhost'
が間違っている可能性があります。