使用 local_infile ON 的 MariaDB 版本不允许使用命令

The used command is not allowed with this MariaDB version with local_infile ON

我知道,有几个问题关注的是同一个问题,但所有建议的修复方法都不适合我。

我正在 运行 编写一个 PHP 脚本,我试图在其中使用 LOAD DATA INFILE 像这样

将 CSV 文件插入我的数据库
$db = mysqli_init();
mysqli_options($db, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($db, $db_host, $db_username, $db_password, $database);

$sql = "LOAD DATA LOCAL INFILE '" . $tpl_vars['filename'] . "' " .
       "INTO TABLE " . $table_name . " " .
       "FIELDS TERMINATED BY '" . $tpl_vars['delimiter'] . "' " .
       "ENCLOSED BY '\"" . $tpl_vars['encapsulation'] . "' " .
       "LINES TERMINATED BY '\n' " .
       ($tpl_vars['contains_header'] == 1 ? "IGNORE 1 ROWS" : "") . " " .
       "(" . $columns . ") " .
       $set;

$db->query($sql);

结果语句看起来像这样并且在语法上是正确的。 table 中存在的所有列。

LOAD data local INFILE '/path/to/file/file.csv' 
INTO TABLE my_table
FIELDS TERMINATED BY ';' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 rows (@category, @title, @price, @description) 
SET category = @category, title = @title, price = @price, description = @description;

我得到的结果是

The used command is not allowed with this MariaDB version.

即使我 运行 phpMyAdmin 中的语句也会导致

2000 - LOAD DATA LOCAL INFILE is forbidden, check mysqli.allow_local_infile

因为我没有对我的服务器的完全 root 访问权限,所以我使用 ini_get_all() 检查了我的 php.ini,它返回了

mysqli.allow_local_infile: {global_value: "1", local_value: "1", access: 4}

检查 my.cnf 我 运行 SHOW VARIABLES 我的数据库。它返回

local_infile ON

据我所知,一切都配置得很好 运行 LOAD DATA LOCAL INFILE。我错过了什么吗?

我的用户确实有以下 GRANTS

GRANT USAGE ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD 'asdf'
GRANT ALL PRIVILEGES ON `db`.* TO 'user'@'localhost'

我在 MariaDB 10.1.44 和 PHP 5.5.38.

看来问题是我的用户没有文件授权。

GRANT FILE ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD 'asdf'

成功了。