2013-06-22 86 views
0

首先,我想說我的英語很差,但我會嘗試。PHP腳本在服務器上很慢,但在本地速度很快

我試着在我的電腦上用wamp服務器運行一個PHP腳本,它工作正常,但是當我上傳時,出於某種原因,它花費了很多時間來完成主機上的執行,並且幾乎總是結束服務臨時不可用錯誤(主機關閉連接)。我使用了一些die()來查看問題在哪裏,我發現它是一個for循環,我在做一個大字符串(我只是連接在一起做一個大的INSERT來執行循環)。而這個循環在本地工作...我不明白爲什麼不在主機上工作。

//insertar valores en bbdd 
$sql = "Insert into valor values "; 
$primer = 1; 

$tiempo_inicio = microtime(true); 

for($i = 0 ; $i <= count($array2) - 1 ; $i++) 
{ 

    //insertar glucosa 
    if(!$array2[$i][1] == "") 
    { 
     if (!$primer) $sql .= ", "; 
     else $primer = 0; 

     $sql .= "('" . $this->paciente . "', '" . $array2[$i][0] . "', 'Glucosa', " . $array2[$i][1] . ")"; 

     $this->Comprobar_Aumentar_Avisos($array2[$i][0], $array2[$i][1]); 
    } 

    //insertar raciones 
    if(!$array2[$i][2] == "") 
    { 
     if (!$primer) $sql .= ", "; 
     else $primer = 0; 

     $sql .= "('" . $this->paciente . "', '" . $array2[$i][0] . "', 'Raciones', " . $array2[$i][2] . ")"; 

    } 

    //insertar insulina 
    if(!$array2[$i][3] == "") 
    { 
     if (!$primer) $sql .= ", "; 
     else $primer = 0; 

     $sql .= "('" . $this->paciente . "', '" . $array2[$i][0] . "', 'Insulina', " . $array2[$i][3] . ")";  
    } 
} 

$tiempo_total = microtime(true) - $tiempo_inicio; 

die($tiempo_total); 


if ($sql != "Insert into valor values ") { 
    $AccessBD = new TAccessBD; 
    $AccessBD->usuario = $this->paciente; 
    $AccessBD->Inicialitzar_BD(); 
    $AccessBD->query = $sql; 
    $res = $AccessBD->Ejecutar_SQL(); 
    $AccessBD->Finalitzar_BD(); 
    unset($AccessBD); 
} 
+0

你的意思是if語句是這樣的!!($ array2 [$ i] [1] ==「」)'而不是'!$ array2 [$ i] [1] ==「」' – Kevin

+0

您可能隔離了錯誤的代碼,請參閱[PHP中的遠程調試和內存分析](http://stackoverflow.com/q/1978603)。另外,準備好的語句比手動插入值列表連接速度更快(並且更簡單)。 – mario

+0

'$ array2'中有多少個條目? – nbrogi

回答

1

的問題是,在循環,我訪問過很多次的數據庫在這個函數:$this->Comprobar_Aumentar_Avisos($array2[$i][0], $array2[$i][1]);

當地方我都沒有問題,因爲本地數據庫的訪問,但在服務器上,與其他外部主機中的數據庫一樣,速度非常慢。

所以我解決了它減少訪問數據庫的次數到最低我可以現在它工作正常。

非常感謝您的幫助!

相關問題