MySQL PHP 配置不允许 LOAD DATA LOCAL INFILE

MySQL PHP 配置不允许 LOAD DATA LOCAL INFILE

我尝试在 my.cnf 中添加行

[mysql]
infile = 1
[mysqld]
infile = 1

SHOW VARIABLES LIKE "%infile"在mysql中显示true。

但是 LOAD DATA 不起作用。我在 PHP 脚本和 phpMyAdmin 中尝试过。

它仅当我从命令行使用该--allow-infile标志启动 mysql 时才有效

mysql --local-infile -u root -p db_name

但这并没有解决PHP的问题。

答案1

我终于以一种看似极其简单的方法解决了这个问题。我看过很多关于这个问题的帖子,但我发现唯一有效的解决方案是一个有点隐藏在stackoverflow 帖子事实证明,该问题可以在连接时解决(这是有道理的):

mysql_connect(HOST,USER,PASS,false,128);

答案就在手册页,事实证明。

我唯一仍然不明白的是为什么这在我的新安装的 Ubuntu 上是必要的,但在任何其他系统(Ubuntu 或 CentOS)上从未出现过问题。

我还应该补充一点,上述方法可能比其他方法更具可移植性,因为您是在代码中而不是在配置文件中设置连接类型。

答案2

/etc/my.cnf 中有一个允许 LOAD DATA LOCAL INFILE 查询的选项:

local-infile = 1

请记住在应用更改后重新启动 MySQL。

答案3

对于 Ubuntu 用户,我找到了解决方案。此问题与 AppArmor 有关MySQL LOAD DATA INFILE-AppArmor 问题

相关内容