Я знаю, есть пара вопросов, посвященных одной и той же проблеме, но все предложенные исправления не работают для меня.
Я запускаю сценарий 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.