如果您不小心使用无效的 $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_cancel() 取消的语句资源如果使用 sqlsrv_prepare() 创建,可以重新执行。使用 sqlsrv_free_statement() 取消的语句资源无法重新执行。