Используемая команда не разрешена с этой версией MariaDB при включенном local_infile - PullRequest
0 голосов
/ 01 мая 2020

Я знаю, есть пара вопросов, посвященных одной и той же проблеме, но все предложенные исправления не работают для меня.

Я запускаю сценарий PHP, в котором я Попытка вставить файл CSV в мою БД с использованием LOAD DATA INFILE, например,

$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);

Получившееся утверждение выглядит как thi sh и синтаксически верно. Все столбцы должны существовать в таблице.

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;

Результат, который я получаю:

Используемая команда недопустима с этой версией MariaDB.

Даже если я запускаю инструкцию в phpMyAdmin это приводит к

2000 - ЗАГРУЗИТЬ ЛОКАЛЬНЫЙ ИНФИЛЬ ДАННЫХ запрещен, проверьте mysqli.allow_local_infile

Поскольку у меня нет полного root доступа к моему серверу, я проверил my php .ini, используя ini_get_all(), и он вернул

mysqli.allow_local_infile: {global_value: "1", local_value: "1", доступ: 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.

1 Ответ

0 голосов
/ 02 мая 2020

Кажется, проблема была в том, что у моего пользователя не было Файловых прав.

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

сделали свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...