关于 php:\\”Load data local infile\\” 命令不允许

"Load data local infile" command not allowed

我正在使用 PHP mysqli 库。每次我尝试运行 LOAD DATA LOCAL INFILE 命令时,mysqli 都会抱怨消息

The used command is not allowed with this MySQL version

从 MySQL 终端(必须使用 --local-infile=1 登录才能使其工作)或 PHPMyAdmin 运行命令时,我没有同样的问题。只是我的 PHP mysqli 代码遇到了这个错误。

我尝试设置此选项:

1
mysqli_options($cnx, MYSQLI_OPT_LOCAL_INFILE, 1);

在我的加载数据调用之前,但仍然没有效果。

我该如何解决这个问题?


有几件事可能是错误的。请尝试以下操作:

添加到你的 my.cnf:

1
2
3
4
5
[mysql]
local-infile=1

[mysqld]
local-infile=1

从 PHP 连接时启用本地 infile

1
2
3
$conn = mysqli_init();
mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($conn,server,user,code,database);

除了在mysql配置文件(/etc/mysql/my.cnf)中提到的"local-infile=1",你可能还需要

1
2
3
4
5
[MySQLi]
mysqli.allow_local_infile = On

[MySQL]
mysql.allow_local_infile = On

在您的系统中 php.ini(/etc/php5/cgi/php.ini 或类似的 - 本地 php.ini 将不起作用)

还有一件大事——如果您在 php.ini 中使用 "open_basedir"(无论其中包含什么值),该功能将被静默禁用!因此,如果您正在使用"加载数据本地 infile",则必须放弃 open_basedir(至少对于 PHP 5.4.4,如 Debian Wheezy 中所示)