2012-01-25 75 views
5

什麼是使用的重要性:PHP :::預處理語句::: freeresult()::: close()方法

$stmt->free_result(); 
$stmt->close(); 

使用準備好的statments這樣的數據庫調用後:

$mysqli=new mysqli("database", "db", "pass", "user"); 

$stmt = $mysqli->prepare("SELECT email FROM users WHERE id=? "); 
$stmt->bind_param('i',$_SESSION['id']); 
$stmt->execute(); 
$stmt->bind_result($email); 
while($stmt->fetch()){ 
    echo $email; 
} 
$stmt->free_result(); //why do i need this? 
$stmt->close();  //why do i need this? 

我問,因爲沒有他們,我沒有看到任何明顯的性能下降。難道這些命令通常僅用於當我保存使用結果:

$stmt->store_result(); 

像這樣:

$mysqli=new mysqli("database", "db", "pass", "user"); 

$stmt = $mysqli->prepare("SELECT email FROM users WHERE id=? "); 
$stmt->bind_param('i',$_SESSION['id']); 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($email); 
while($stmt->fetch()){ 
    echo $email; 
} 
$stmt->free_result(); //why do i need this? 
$stmt->close();  //why do i need this? 

最終問題歸結到何時是適當的時候使用freeresult()和close( )?

回答

1

free_results語句告訴數據庫引擎它可以釋放結果集。

執行語句時,會創建一個迭代器。客戶端(您的應用程序)通過逐一或大塊地下載每個結果來迭代每個結果。

這使您可以在不下載所有結果的情況下迭代數百萬條記錄。

編輯

免費結果將釋放在客戶端的內存。如果單個記錄非常大並且需要釋放內存,這很有用。

參見: http://php.net/manual/en/function.mysql-free-result.php

+1

不,它並沒有告訴任何東西到數據庫 – zerkms

+0

所以我可以用任何語句的結束freeresult(),我不需要storeresult()呢? –

+1

@丹Kanze:只要你沒有遇到任何問題 - 不要這樣做,不要浪費CPU週期爲Nothing – zerkms