我有一个每天从cron作业运行的php脚本,解压缩包含文本数据的大型zip文件并将其保存回mySQL数据库。
zip文件每天更新并上传到托管php文件的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 :(得分:0)
运行此:show variables like '%local%'
如果local_infile ='关',则'开'
有关详细信息,请查看此链接 Mysql Load data
尝试按照以下步骤操作:
1)打开my.cnf并在[mysqld]和[mysql]
下添加“local-infile = 1”行的[mysqld] 本地的infile = 1
[MySQL的] 本地的infile = 1
保存并退出文件。
/etc/init.d/mysql restart
2)为用户授予文件权限
的MySQL>将。上的文件授予user @'localhost';
的MySQL>冲洗权限;
3)重启mysql
/etc/rc.d/init.d/mysql restart
1)打开my.cnf并在[mysqld]和[mysql]
下添加“local-infile = 1”行的[mysqld] 本地的infile = 1
[MySQL的] 本地的infile = 1
保存并退出文件。
/etc/init.d/mysql restart
2)上面应该允许你在mysql shell中运行命令,但是你在浏览器上作为php脚本运行它时遇到了问题。 所以检查它是否在php中启用。
root @ abc#grep mysql.allow_local_infile /etc/php5/apache2/php.ini mysql.allow_local_infile = On
现在,上面的命令显示它已启用。如果为Off,请将其更改为On并重新启动apache。
3)我尝试通过编辑connect命令来修改我的脚本,如下所示。
的mysql_connect(“本地主机”,”为myuser”,”为mypass”,”假”,128);
链接参考:The used command is not allowed with this MySQL version – LOAD DATA LOCAL INFILE