我知道以前有人问过这个问题,但我找不到任何可能有帮助的新帖子。 LOAD DATA LOCAL INFILE 一直运行到今天。除了为 PHP 和(不确定,但我认为)MariaDB 运行更新之外,我没有更改任何其他内容。我正在运行 PHP 7.2.17 和 MariaDB 10.1.38
现在我收到这个错误:
警告:mysqli::query(): LOAD DATA LOCAL INFILE 禁止
我检查了我能找到的:
- db 用户拥有所有权限,即使是 root 用户也会收到此错误
- 检查 my.cnf 中的条目 本地文件=1
Load 语句在 mysql 命令行中工作正常,但在 PHP 脚本中无效。
这是我运行导入的方式:
define ('DB_USER', "db_user");
define ('DB_PASSWORD', "my_password");
define ('DB_DATABASE', "prosjekt");
define ('DB_HOST', "localhost");
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
我在最后一行收到错误 -> $mysqli->query($query);
$query = <<<eof
LOAD DATA LOCAL INFILE '$fileName'
INTO TABLE prosjekt
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r'
(prosjektnavn,prosjektstatus,prosjektbesk,oppdragsgiver,prosjektans,prosjektdelt,start,slutt,prosjektnr,prosjekttype,sortnr,ant_rapport,litt_link)
eof;
$mysqli->query($query);
所以我可以在 mysql 控制台中很好地运行它,但不能在 PHP 脚本中运行,它今天开始失败。任何想法如何解决它?
当我跑 显示变量; 我明白了,所以它应该工作?
local_infile 开启
最佳答案
我解决了这个问题,并为任何感兴趣的人解决了这个问题。我读了 this有帮助的帖子
似乎 PHP 升级改变了我的 php.ini。我想我有一些关于保留配置或覆盖它的问题。不确定我在那里回答正确!
由于这是一项 cron 工作,我需要在这里修复 php.ini:
/etc/php/7.2/cli/php.ini
取消注释此行或更改它:
mysqli.allow_local_infile = 开启
如果您在各自的目录/etc/php/7.2 ->/fpm/apache 中运行 php-fpm,您将对 php.ini 执行相同的操作
关于php - php/mariadb 更新后禁止加载数据本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55818568/