2016-09-28 76 views
0

我有一个每天从cron作业运行的php脚本,解压缩包含文本数据的大型压缩文件,并将其保存回mySQL数据库。PHP 5.6 - 这个MySQL版本不允许使用命令

zip文件被更新并每天上传到FTP文件所在的FTP站点。

这有所有几个月的工作100%的罚款,但我认为最近我们的托管将自己升级到PHP 5.6版本,现在我得到这些错误:

Error populating table: The used command is not allowed with this MySQL version 

用于填充MySQL表的代码是这样的:

$loadfile = "LOAD DATA LOCAL INFILE '$textfile' INTO TABLE $tablename FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' IGNORE 1 LINES"; 
mysqli_query($conn, $loadfile) 

我真的不明白的是,有时它似乎运行良好,有时它失败!也许每周一次它现在可以正常工作,并且在所有其他日子都会失败。

在PHP中有什么改变,意味着上面的代码现在是错误的?

任何人都可以帮助上述代码,让它在PHP 5.6上可靠地运行吗?

+0

只是一个想法,有你在,是造成打嗝 – RiggsFolly

+0

检查你的MySQL版本的一些微妙的方式负载的变化数据。要执行echo'$ loadfile',然后尝试从cmd或phpmyadmin运行mysql中的原始查询。这与php版本无关。 –

+0

这个问题不是重复的。我已检查load data命令是否已启用。数据格式没有改变。我知道我们的主机(1&1)最近更新了我们的PHP版本,但我不知道mysql版本是否已更改。 – Richard

回答

0

运行以下命令:show variables like '%local%'

如果local_infile = '关闭',然后 '开' 它

欲了解更多详情,请查看此链接 Mysql Load data

尝试按照如下步骤:

1)打开my.cnf,在[mysqld]和[mysql]下面添加“local-infile = 1”这一行,然后在[mysql]中加入的[mysqld] 本地-infile的= 1

[MySQL的] 本地-infile的= 1

保存并退出该文件。

/etc/init.d/mysql重启

2)授予file权限用户

的mysql>批文件上到user @'localhost';

mysql> flush privileges;

3)重启MySQL

/etc/rc.d/init.d/mysql重启

1)打开的my.cnf和添加的行“本地的infile = 1”下的[mysqld]和[MySQL的]

的[mysqld] 本地-infile的= 1

[MySQL的] 本地-infile的= 1

保存并退出该文件。

/etc/init。d/mysql重启

2)以上应该允许你在mysql shell中运行命令,但是你在通过浏览器作为php脚本运行时遇到问题。 因此,检查它是否在PHP中启用。

根@ ABC#grep的mysql.allow_local_infile /etc/php5/apache2/php.ini mysql.allow_local_infile =开

现在,上面的命令示出它被启用。如果它关闭,请将其更改为开并重新启动apache。

3)我尝试通过编辑connect命令来修改我的脚本,如下所示。 mysql_connect(“localhost”,“myuser”,“mypass”,“false”,128);

链接参考:The used command is not allowed with this MySQL version – LOAD DATA LOCAL INFILE

+0

local_infile处于打开状态。我检查了这个aleady。 – Richard

相关问题