2012-07-27 121 views
3

我想插入約12500行到我的遊戲服務器的地圖數據庫。 這是我的腳本生成查詢長插入查詢

sql = "INSERT INTO `legends`.`map` (`x`, `y`, `land`, `collision`, `impedance`, `effect`) VALUES " 
for (y=0;y<ig.game.collisionMap.data.length;y++){ 
    for (x=0;x<ig.game.collisionMap.data[y].length;x++){ 
     if (x==0&&y==0){ 
     comma="" 
     }else{ 
     comma="," 
     } 
     sql=sql+comma+"("+x*55+","+y*55+",'kesmai',"+ig.game.collisionMap.data[y][x]+","+ig.game.backgroundMaps[0].data[y][x]+", '0')"; 
    } 
} 
console.log(sql) 

輸出爲y = 86,X = 145 我的客戶端腳本訪問數據的地圖,所以我只是粘貼輸出到phpMyAdmin運行查詢。我碰到的問題(我期望)是我的PHP腳本只能運行30秒,這是我的錯誤。

致命錯誤:用C超過30秒的最大執行時間:\瓦帕\應用\ phpmyadmin3.4.10.1 \庫\上線session.inc.php 92

我正在運行WAMP服務器和我試圖編輯我的php.ini文件在這裏

; Maximum execution time of each script, in seconds 
; http://php.net/max-execution-time 
; Note: This directive is hardcoded to 0 for the CLI SAPI 
max_execution_time = 0 

; Maximum amount of time each script may spend parsing request data. It's a good 
; idea to limit this time on productions servers in order to eliminate unexpectedly 
; long running scripts. 
; Note: This directive is hardcoded to -1 for the CLI SAPI 
; Default Value: -1 (Unlimited) 
; Development Value: 60 (60 seconds) 
; Production Value: 60 (60 seconds) 
; http://php.net/max-input-time 
max_input_time = -1 

到目前爲止沒有運氣......關於如何運行一個長查詢如此>的任何建議?

我正在考慮暫時將它放在它運行在我的Node.js服務器腳本

+0

如果您閱讀錯誤消息,它看起來像phpmyadmin在'C:\ wamp \ apps \ phpmyadmin3.4.10.1 \ libraries \ session.inc.php'中設置了不同的執行時間。嘗試編輯該文件或phpmyadmin配置而不是php.ini – 2012-07-27 17:53:21

+1

您可以將數據分組爲100個塊,併爲每個塊分別運行一次插入。 – 2012-07-27 17:53:44

+1

'set_time_limit(0);'在PHP腳本的頂部 - 但實際上您應該將數據傳遞給PHP(例如JSON)並使用準備好的語句。下一個你會遇到的問題我相當確定的是,MySQL不會接受這個大小的查詢和/或PHP將耗盡內存,試圖處理一個很大的字符串。 – DaveRandom 2012-07-27 17:54:26

回答

0

你們有一些非常好的建議,我無法爲我的特定應用程序工作。我的解決方案是從node.js執行從我的客戶端發送sql到服務器的查詢。而不是使用phpMyAdmin。我曾嘗試從我的phpMyadmin腳本中刪除時間限制,但沒有奏效。我通過websockets傳遞了查詢,但它不是必需的。

+0

另外,我應該說,max_execution_time = 0不像你期望的那樣工作。所以,如果你需要,只需將其設置爲一個長的值,而不是300(秒)。 – 2012-08-10 23:01:36

3

我想你要找的是什麼set_time_limit()http://php.net/manual/en/function.set-time-limit.php

但是你應該看看是否有什麼辦法可以改善查詢本身的性能。

+0

它不是一個PHP腳本,除非phpMyadmin允許您插入php,但據我所知它不是一個PHP腳本 – Shawn 2012-07-27 19:08:04

+0

@Shawn如果它不是PHP腳本,爲什麼要標記PHP? – Matt 2012-08-02 12:39:14