2012-01-31 40 views
4

何時應該調用mysqli :: close?我從來沒有用過if語句來檢查bind_param(),prep()和execute()是否成功。我應該在方法末尾調用$ stmt-> close()(下面)。或者我應該在每種情況之後調用它,以確保即使在某個階段進程失敗時關閉數據庫連接,例如綁定參數。何時調用mysqli :: close

public function function_name($id,$new_id){ 
    $query = "UPDATE TABLE SET name = ? WHERE field = ? "; 
    if($stmt=$this->prepare($query)){ 
     if($stmt->bind_param("is", $id, $new_id)){ 
      if($stmt->execute()){ 

      }else{//Could not execute the prepared statement 
       $message = "Could not execute the prepared statement"; 
      } 
     }else{//Could not bind the parameters 
      $message = "Could not bind the parameters"; 
     } 
    }else{ 
     $message = "Could not prepare the statement"; 
    } 
    return $message 
} 
+1

除非您處於長時間運行腳本的情況,否則不要執行關閉操作,因爲在腳本退出時,PHP將爲您清理。除非您確定已完成所有數據庫操作,否則不應關閉連接。 – 2012-01-31 16:45:20

+0

@MarcB - 我不確定我是否同意這是很好的做法。雖然PHP會自動將所有內容全部拆除,但如果您打算遷移到本地編程領域,養成照顧資源和處理完它們的習慣是一個非常重要的習慣。 – Polynomial 2012-01-31 16:50:40

+0

順便說一句,你應該看看PHP異常處理,而不是使用'if'語句的巨大嵌套:http://php.net/manual/en/class.exception.php – Crontab 2012-01-31 17:04:00

回答

0

當你完成它時,你應該總是優雅地關閉連接,以避免性能和內存/處理泄漏問題。另一方面,你也應該確保你的真的是完成它 - 你的腳本會崩潰,如果你嘗試使用一個封閉的連接。

語句也是如此。如果陳述不再使用,請適當處置。

0

只需稍微考慮一下,您可以創建另一個名爲function_close的方法,並在調用function_name方法後調用它。

這樣,如果您更改爲pdo或mongo,您只需重構方法而不是每個實例close

+0

我不認爲他在問這個。 – Polynomial 2012-01-31 16:51:13

+0

試着想我會給他一些想法。 – 2012-01-31 16:52:29

7

當PHP退出時,它會優雅地關閉數據庫連接。

使用close方法的唯一原因是當你想終止一個你不再使用的數據庫連接,並且你有很多事情要做:像處理和流式處理數據,但如果這是快速的,你可以忘記關閉聲明。

將它放在腳本的末尾意味着冗餘,沒有性能或內存增益。

請告訴我是非常重要的:未設置未使用的數據,如果你想避免內存泄漏(這在我的卑微opnion在這種情況下PHP核心的問題)使用方法:

mysqli_kill(); 
mysqli_close(); 

這樣的插座也殺了。

相關問題