php - php/mariadb 更新后禁止加载数据本地文件

标签 php mariadb load-data-infile

我知道以前有人问过这个问题,但我找不到任何可能有帮助的新帖子。 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/

相关文章:

mysql - 从命令行 Mysql 创建表时出现问题

mysql - LOAD DATA LOCAL INFILE COMMAND 几个错误

php - 至少选择一个复选框,PHP

java - 串联sql语句插入

php - 使用以下数据库布局在 mysql 中创建 View 的最佳方法是什么?

mysqli_real_connect() : (HY000/1698): Access denied for user 'root' @'localhost' - getting this error after my mac restarted itself

java - Mysql 'LOAD DATA LOCAL INFILE' 根据文件指定列的值

php - 检查数据库字段是否包含内爆变量的值

php - 将整个 PDF 表单提交到 PHP 脚本

php - Mysql,删除具有多个值的行