0

我正在尝试将文件中的数据插入到 mysql 表中,我正在使用它LOAD DATA INFILE,这是我的 php 代码

sql = " HERE LOAD DATA INFILE QUERY ...";
$sth = $db->prepare( $sql ); 
$sth->execute();

var_dump( $sth->errorInfo() );

数据未加载,errorInfo() 显示Access denied for user 'blabla'@'localhost' (using password: YES)

但是我连接到数据库的这个用户拥有所有特权。

为什么会这样?我哪里错了?

4

2 回答 2

2

尝试授予文件权限:

GRANT FILE ON *.* TO user@localhost

您可以在此处阅读更多信息

于 2013-04-15T07:40:41.780 回答
0

正如斯蒂芬的回答正确指出的那样,您需要将 FILE 权限授予想要从外部文件加载数据的用户。此权限需要由 root 或具有适当授予权限的用户授予。

请注意,FILE 权限是全局权限。见https://mariadb.com/kb/en/grant/

当您使用该命令时grant all privileges on <dbname>.* to <user>@<host>;,您正在授予数据库权限。因此,文件权限不会包含在授权语句中。

flush privileges;在授予权限后,无论是全局权限还是数据库权限或任何级别,执行命令以确保应用更改始终是一个好主意。

重要提示:命令load data infileload data local infile. 如 MariaDB 文档中所述:

当您执行 LOAD DATA INFILE 语句时,MariaDB 服务器会尝试从自己的文件系统中读取输入文件。相反,当您执行 LOAD DATA LOCAL INFILE 语句时,客户端会尝试从其文件系统中读取输入文件,并将输入文件的内容发送到 MariaDB 服务器。这允许您将文件从客户端的本地文件系统加载到数据库中。

https://mariadb.com/kb/en/load-data-infile/

如果您尝试从主目录加载 CSV 文件,则必须使用load data local infile.

于 2021-10-04T11:15:54.213 回答