在php / mariadb更新后禁止加载数据本地INFILE

问题描述 投票:0回答:2

我知道以前曾经问过这个问题,但我找不到任何可能有帮助的新帖子。 LOAD DATA LOCAL INFILE一直运作至今。我没有改变任何东西,除了运行PHP的更新和(不确定,但我认为)MariaDB。我现在运行PHP 7.2.17和MariaDB 10.1.38

现在我收到此错误:警告:mysqli :: query():LOAD DATA LOCAL INFILE禁止

我检查了我能找到的内容: - db user拥有所有权限,甚至root用户都会收到此错误 - 检查my.cnf是否输入local-infile = 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脚本中运行,并且它今天开始失败。任何想法如何解决它?当我运行SHOW VARIABLES;我知道这应该有用吗?

local_infile ON

php mariadb load-data-infile
2个回答
1
投票

我只是醒来我的一个应用程序使用php7.2和mysqli做同样的事情。

当我检查less /var/log/apt/history.log时,看起来我的php7.2昨晚升级为Ubuntu自动安全更新的一部分。

我的local_infile变量也开启但似乎没有起作用。我修正了我的问题:

mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true)

1
投票

我解决了这个问题并且感兴趣的是我读过有帮助的this帖子

似乎PHP升级改变了我的php.ini。我想我有一些问题要保持配置或覆盖它。不确定我的回答是否正确!

由于这是一个cron工作,我需要在这里修复php.ini:

/etc/PHP/7.2/处理/PHP.INI

取消注释此行或更改它:

mysqli.allow_local_infile =开

如果你在各自的目录/etc/php/7.2 - > / fpm / apache中运行php-fpm,你会对php.ini做同样的事情

© www.soinside.com 2019 - 2024. All rights reserved.