2016-09-28 61 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