如果您不小心以無效的 $stmt 資源呼叫此函式,您可能會看到非預期的致命錯誤。
我在清理一些程式碼時遺漏了這裡的呼叫,這導致我的 IIS 伺服器產生錯誤 500 資源未找到的錯誤。此外,它似乎只影響某些使用者,而不是所有使用者,而且我無法找出為什麼只有特定使用者在所有使用者都呼叫它時才會發生錯誤。
(沒有版本資訊,可能只在 Git 中)
sqlsrv_free_stmt — 釋放指定陳述式的所有資源
釋放指定陳述式的所有資源。在呼叫 sqlsrv_free_stmt() 後,該陳述式將無法再使用。如果對正在執行且會更改伺服器狀態的陳述式呼叫 sqlsrv_free_stmt(),則陳述式執行將會終止並回復原狀。
範例 #1 sqlsrv_free_stmt() 範例
<?php
$serverName = "serverName\sqlexpress";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
$stmt = sqlsrv_query( $conn, "SELECT * FROM Table_1");
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
/*-------------------------------
在此處理查詢結果。
-------------------------------*/
/* 釋放陳述式資源。 */
sqlsrv_free_stmt( $stmt);
?>
sqlsrv_free_stmt() 和 sqlsrv_cancel() 的主要區別在於,使用 sqlsrv_prepare() 建立的陳述式資源,如果使用 sqlsrv_cancel() 取消,則可以重新執行。使用 sqlsrv_free_stmt() 取消的陳述式資源則無法重新執行。