2015-12-02 124 views
0

我有幾個自定義腳本運行在我的服務器上從模板中提取CSV文件。這些文件有時候是250,000多行。當我到達這一點時,我得到這個錯誤。大cvs文件上的fgets錯誤

警告:發送QUERY數據包時發生錯誤。 PID = 24022

這與鏈接到mysql查詢的數據包大小不夠大。

我增加了下面的mysql查詢大小,它似乎改善它,但不是所有的方式。

SHOW VARIABLES LIKE 'max_allowed_packet'; 
    set global max_allowed_packet=1073741824; 
    set global net_buffer_length=1048576; 

我使用的是專用的服務器,擁有大量的資源,所以我可能會增加這一點,但我不能確定有多少是安全+真的不知道這是否是處理這種情況

下面是最好的方法我使用(我已刪除了很多,這只是混亂的代碼)

$br = ']'; //this changes 
$handle = fopen($path."".$inputFileName, "r"); 
while (($data = fgetcsv($handle, 0, "".$br."")) !== FALSE) 
    { 
    ....... my code .... based on $data["... 
+2

你在循環內部究竟做了什麼?因爲fgetcsv()不是什麼導致與該錯誤消息的問題....你是否試圖建立一個巨大的查詢做所有CSV數據的單個數據庫請求? –

+0

其實,我已取消註釋循環內的所有內容,並且仍然收到問題 –

+0

聽起來像循環內部的變量之一未針對每個循環進行初始化。你能發佈整個代碼嗎? –

回答

0

這個問題是我的腳本代碼(很多),其中需要很長時間才能運行。基本上我只是重新連接到Mysql。所有評論在這裏是有幫助的