2015-09-27 52 views
3

我最近決定從MySQLi跳到PDO,並且有些事情對PDO準備好的語句感到困擾。關閉PDO語句

在庫MySQLi我會寫一個典型的取這樣的查詢:

$db = new mysqli("localhost", "user", "pass", "mydb"); 
$sql = "SELECT firstCol, secondCol FROM testTable WHERE thirdCol=?"; 
$stmt = $db->prepare($sql); 
$stmt->bind_param("s", $thirdCol); 
$stmt->execute(); 
while(($row = $stmt->fetch())) 
{ 
    //do something 
} 
$stmt->close(); 
$db->close(); 

當然是有合適的錯誤檢查。查詢後,我總是關閉語句和數據庫連接。當使用PDO時,我通過將數據庫處理程序設置爲null來關閉連接,如下所示:

$db = null; 

但是聲明呢?我發現一個文章here,暗示使用unsetcloseCursor。哪一個更好?我應該像連接一樣將它設置爲null

+0

不要打擾,除非你有一個原因。通常不需要關閉/取消設置語句句柄。並且在執行期間多次打開和關閉數據庫連接甚至是毫無意義的。 – mario

+0

@mario連接一段時間後連接是否自動關閉?當活動連接總數超過MySQL服務器允許的最大連接數時會發生什麼? – dimlucas

+3

當PHP進程終止時,數據庫連接會自動關閉。無論如何,取消手柄並不會關閉手柄,而是由駕駛員進行緩衝。因此重新實施PDO類是多餘的。 – mario

回答

3

當然是有合適的錯誤檢查。

我相信,錯誤檢查是幾乎沒有合適的。爲了檢查錯誤,你必須設置一個單獨的mysqli配置選項(以及PDO),並且單獨執行特定的查詢。

查詢後,我總是關閉語句和數據庫連接。

說到數據庫連接的,如果你不得不在同一個腳本運行多個查詢,你做到了完全錯誤。由於您必須再次打開連接才能運行另一個查詢,這會無故拖慢您的應用程序。

當使用PDO我通過設置數據庫處理程序關閉連接到空

就像使用mysqli的,如果你就在腳本結束關閉它,這是確定的,但不必要的。但是如果你在每次查詢後關閉它,那就錯了!

你只有一次連接,而且比使用單個連接變量,一路過關斬將。

截至聲明,這取決於你。大部分時間語句變量被覆蓋,這會使先前的實例設置爲空。當你調用一個函數時,所有的變量在函數結束時都被設置爲null。當php腳本結束時,它的所有變量都被設置爲空。因此,作爲一項規則,沒有什麼可擔心的。