最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用游標(biāo)進行PHP SQLSRV查詢的方法與注意事項

 更新時間:2023年05月08日 09:52:19   作者:cncco  
在 PHP 中使用 SQLSRV 查詢時,如果查詢結(jié)果集較大,可以考慮使用游標(biāo)來提高查詢效率。使用游標(biāo)可以將查詢結(jié)果集分成多個小部分進行處理,減輕服務(wù)器的負擔(dān),提高查詢性能

SQLSRV驅(qū)動程序允許您創(chuàng)建一個結(jié)果集,其中包含可以根據(jù)游標(biāo)類型以任何順序訪問的行。本主題將討論客戶端(緩沖)和服務(wù)器端(非緩沖)游標(biāo)及其用法。

使用SQLSRV查詢時,默認情況下,使用向前游標(biāo),它允許您從結(jié)果集的第一行開始一次移動一行,直到到達結(jié)果集的末尾。當(dāng)然,有時這不是你所期待的,這就需要指定游標(biāo)類型。

游標(biāo)類型

您可以使用Scrollable來指定結(jié)果集的游標(biāo),以實現(xiàn)各種以順序訪問結(jié)果集中的任何行。下表列出了可以傳遞給Scrollable的選項。

OptionDescription
SQLSRV_CURSOR_FORWARD允許您從結(jié)果集的第一行開始一次移動一行,直到到達結(jié)果集的末尾。 這是默認的游標(biāo)類型。 sqlsrv_num_rows將返回一個錯誤。 forward;是SQLSRV_CURSOR_FORWARD的縮寫形式。
SQLSRV_CURSOR_STATIC允許您以任何順序訪問行,但不會反映數(shù)據(jù)庫中的更改。 static;是SQLSRV_CURSOR_STATIC的縮寫形式。
SQLSRV_CURSOR_DYNAMIC允許您以任何順序訪問行,并反映數(shù)據(jù)庫中的更改。 sqlsrv_num_rows將返回一個錯誤。 dynamic;是SQLSRV_CURSOR_DYNAMIC的縮寫形式。
SQLSRV_CURSOR_KEYSET允許您以任何順序訪問行。但是,如果從表中刪除了一行,鍵集游標(biāo)不會更新行計數(shù)(刪除的行返回時沒有值)。 keyset;是SQLSRV_CURSOR_KEYSET的縮寫形式。
SQLSRV_CURSOR_CLIENT_BUFFERED允許您以任何順序訪問行。創(chuàng)建客戶端游標(biāo)查詢。 buffered;是SQLSRV_CURSOR_CLIENT_BUFFERED的縮寫形式。

如果查詢生成多個結(jié)果集,則Scrollable選項應(yīng)用于所有結(jié)果集。

選擇結(jié)果集中的行

創(chuàng)建結(jié)果集后,就可以使用sqlsrv_fetch、sqlsrv_fetch_array或sqlsrv_fetch_object來指定行了。

下表說明了可以對行進行的操作。

參數(shù)描述
SQLSRV_SCROLL_NEXT指定下一行。
SQLSRV_SCROLL_PRIOR指定當(dāng)前行之前的行。
SQLSRV_SCROLL_FIRST指定結(jié)果集中的第一行。
SQLSRV_SCROLL_LAST指定結(jié)果集中的最后一行。
SQLSRV_SCROLL_ABSOLUTE指定指定的行抵消參數(shù)。
SQLSRV_SCROLL_RELATIVE指定指定的行抵消當(dāng)前行中的參數(shù)。

SQLSRV Driver之服務(wù)端游標(biāo)

以下示例顯示了各種游標(biāo)的效果。在示例的第33行,您可以看到指定不同游標(biāo)的三條查詢語句中的第一條。其中兩個查詢語句被注釋。每次運行程序時,使用不同的游標(biāo)類型查看第47行上的數(shù)據(jù)庫更新效果。

<?php  
$server = "server_name";  
$conn = sqlsrv_connect( $server, array( 'Database' => 'test' ));  
if ( $conn === false ) {  
   die( print_r( sqlsrv_errors(), true ));  
}  
$stmt = sqlsrv_query( $conn, "DROP TABLE dbo.ScrollTest" );  
if ( $stmt !== false ) {   
   sqlsrv_free_stmt( $stmt );   
}  
$stmt = sqlsrv_query( $conn, "CREATE TABLE ScrollTest (id int, value char(10))" );  
if ( $stmt === false ) {  
   die( print_r( sqlsrv_errors(), true ));  
}  
$stmt = sqlsrv_query( $conn, "INSERT INTO ScrollTest (id, value) VALUES(?,?)", array( 1, "Row 1" ));  
if ( $stmt === false ) {  
   die( print_r( sqlsrv_errors(), true ));  
}  
$stmt = sqlsrv_query( $conn, "INSERT INTO ScrollTest (id, value) VALUES(?,?)", array( 2, "Row 2" ));  
if ( $stmt === false ) {  
   die( print_r( sqlsrv_errors(), true ));  
}  
$stmt = sqlsrv_query( $conn, "INSERT INTO ScrollTest (id, value) VALUES(?,?)", array( 3, "Row 3" ));  
if ( $stmt === false ) {  
   die( print_r( sqlsrv_errors(), true ));  
}  
$stmt = sqlsrv_query( $conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => 'keyset' ));  
// $stmt = sqlsrv_query( $conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => 'dynamic' ));  
// $stmt = sqlsrv_query( $conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => 'static' ));  
$rows = sqlsrv_has_rows( $stmt );  
if ( $rows != true ) {  
   die( "Should have rows" );  
}  
$result = sqlsrv_fetch( $stmt, SQLSRV_SCROLL_LAST );  
$field1 = sqlsrv_get_field( $stmt, 0 );  
$field2 = sqlsrv_get_field( $stmt, 1 );  
echo "\n$field1 $field2\n";  
$stmt2 = sqlsrv_query( $conn, "delete from ScrollTest where id = 3" );  
// or  
// $stmt2 = sqlsrv_query( $conn, "UPDATE ScrollTest SET id = 4 WHERE id = 3" );  
if ( $stmt2 !== false ) {   
   sqlsrv_free_stmt( $stmt2 );   
}  
$result = sqlsrv_fetch( $stmt, SQLSRV_SCROLL_LAST );  
$field1 = sqlsrv_get_field( $stmt, 0 );  
$field2 = sqlsrv_get_field( $stmt, 1 );  
echo "\n$field1 $field2\n";  
sqlsrv_free_stmt( $stmt );  
sqlsrv_close( $conn );  
?>

SQLSRV Driver之客戶端游標(biāo)

客戶端游標(biāo)是Microsoft Drivers for PHP for SQL Server 3.0版中添加的一項功能,它允許您在內(nèi)存中緩存整個結(jié)果集。使用客戶端游標(biāo)執(zhí)行查詢后,行計數(shù)可用。

客戶端游標(biāo)應(yīng)該用于中小型結(jié)果集。對大型結(jié)果集使用服務(wù)器端游標(biāo)。

如果緩沖區(qū)不夠大,無法容納整個結(jié)果集,則查詢將返回false。您可以將緩沖區(qū)大小增加到PHP內(nèi)存限制。

使用SQLSRV驅(qū)動程序,可以使用sqlsrv_configure來設(shè)置ClientBufferMaxKBSize以配置保存結(jié)果集的緩沖區(qū)的大小。

sqlsrv_get_config返回ClientBufferMaxKBSize的值。

您還可以在php.ini文件中使用sqlsrv.ClientBufferMaxKBSize來設(shè)置最大緩沖區(qū)大?。ɡ?,sqlsrv.clientBufferMaxKBSign=1024)。

以下示例顯示:

1、行計數(shù)始終可用于客戶端游標(biāo)。

2、使用客戶端游標(biāo)和批處理語句。

<?php  
$serverName = "(local)";  
$connectionInfo = array("Database"=>"AdventureWorks");  
$conn = sqlsrv_connect( $serverName, $connectionInfo);  
if ( $conn === false ) {  
   echo "Could not connect.\n";  
   die( print_r( sqlsrv_errors(), true));  
}  
$tsql = "select * from HumanResources.Department";  
// Execute the query with client-side cursor.  
$stmt = sqlsrv_query($conn, $tsql, array(), array("Scrollable"=>"buffered"));  
if (! $stmt) {  
   echo "Error in statement execution.\n";  
   die( print_r( sqlsrv_errors(), true));  
}  
// row count is always available with a client-side cursor  
$row_count = sqlsrv_num_rows( $stmt );  
echo "\nRow count = $row_count\n";  
// Move to a specific row in the result set.  
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_FIRST);  
$EmployeeID = sqlsrv_get_field( $stmt, 0);  
echo "Employee ID = $EmployeeID \n";  
// Client-side cursor and batch statements  
$tsql = "select top 2 * from HumanResources.Employee;Select top 3 * from HumanResources.EmployeeAddress";  
$stmt = sqlsrv_query($conn, $tsql, array(), array("Scrollable"=>"buffered"));  
if (! $stmt) {  
   echo "Error in statement execution.\n";  
   die( print_r( sqlsrv_errors(), true));  
}  
$row_count = sqlsrv_num_rows( $stmt );  
echo "\nRow count for first result set = $row_count\n";  
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_FIRST);  
$EmployeeID = sqlsrv_get_field( $stmt, 0);  
echo "Employee ID = $EmployeeID \n";  
sqlsrv_next_result($stmt);  
$row_count = sqlsrv_num_rows( $stmt );  
echo "\nRow count for second result set = $row_count\n";  
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_LAST);  
$EmployeeID = sqlsrv_get_field( $stmt, 0);  
echo "Employee ID = $EmployeeID \n";  
?>

以下示例顯示了使用sqlsrv_prepare(sqlsrv_prepare)并配置了不同的客戶端緩沖區(qū)大小。

<?php  
$serverName = "(local)";  
$connectionInfo = array( "Database"=>"AdventureWorks");  
$conn = sqlsrv_connect( $serverName, $connectionInfo);  
if ( $conn === false ) {  
   echo "Could not connect.\n";  
   die( print_r( sqlsrv_errors(), true));  
}  
$tsql = "select * from HumanResources.Employee";  
$stmt = sqlsrv_prepare( $conn, $tsql, array(), array("Scrollable" => SQLSRV_CURSOR_CLIENT_BUFFERED, "ClientBufferMaxKBSize" => 51200));
if (! $stmt ) {  
   echo "Statement could not be prepared.\n";  
   die( print_r( sqlsrv_errors(), true));  
}  
sqlsrv_execute( $stmt);  
$row_count = sqlsrv_num_rows( $stmt );  
if ($row_count)  
   echo "\nRow count = $row_count\n";  
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_FIRST);  
if ($row ) {  
   $EmployeeID = sqlsrv_get_field( $stmt, 0);  
   echo "Employee ID = $EmployeeID \n";  
}  
?>

到此這篇關(guān)于使用游標(biāo)進行PHP SQLSRV查詢的方法與注意事項的文章就介紹到這了,更多相關(guān)PHP SQLSRV游標(biāo)查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • php rename錯誤原因的查找方法

    php rename錯誤原因的查找方法

    在本篇文章里小編給大家整理的是一篇關(guān)于php rename錯誤原因的查找方法,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-07-07
  • PHP實現(xiàn)頁面跳轉(zhuǎn)的三種方式

    PHP實現(xiàn)頁面跳轉(zhuǎn)的三種方式

    在PHP中,實現(xiàn)頁面跳轉(zhuǎn)有多種方法,這些方法包括使用HTTP頭信息、JavaScript以及Meta標(biāo)簽,本文給大家介紹了PHP實現(xiàn)頁面跳轉(zhuǎn)的三種方式,并通過代碼講解的非常詳細,需要的朋友可以參考下
    2024-11-11
  • 基于php偽靜態(tài)的實現(xiàn)方法解析

    基于php偽靜態(tài)的實現(xiàn)方法解析

    這篇文章主要介紹了基于php偽靜態(tài)的實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • php中session定期自動清理的方法

    php中session定期自動清理的方法

    這篇文章主要介紹了php中session定期自動清理的方法,如何設(shè)置php實現(xiàn)session定期自動清理,本文會給大家詳細介紹,需要的朋友可以參考下
    2015-11-11
  • 實現(xiàn)了一個PHP5的getter/setter基類的代碼

    實現(xiàn)了一個PHP5的getter/setter基類的代碼

    實現(xiàn)了一個PHP5的getter/setter基類的代碼...
    2007-02-02
  • 一文詳解php中.env實現(xiàn)原理

    一文詳解php中.env實現(xiàn)原理

    在PHP中,.env文件是一種常見的配置文件格式,用于存儲應(yīng)用程序的環(huán)境變量,本文將給大家大家詳細的介紹一下php中.env實現(xiàn)原理,文中給出了簡單的示例代碼,需要的朋友可以參考下
    2024-01-01
  • php創(chuàng)建桌面快捷方式實現(xiàn)方法

    php創(chuàng)建桌面快捷方式實現(xiàn)方法

    這篇文章主要介紹了php創(chuàng)建桌面快捷方式實現(xiàn)方法,需要的朋友可以參考下
    2015-12-12
  • 在yii中新增一個用戶驗證的方法詳解

    在yii中新增一個用戶驗證的方法詳解

    本篇文章是對在yii中新增一個用戶驗證的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • thinkphp如何傳遞GET參數(shù)方法詳解

    thinkphp如何傳遞GET參數(shù)方法詳解

    這篇文章主要為大家介紹了thinkphp如何傳遞GET參數(shù)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • PHPUnit測試私有屬性和方法功能示例

    PHPUnit測試私有屬性和方法功能示例

    這篇文章主要介紹了PHPUnit測試私有屬性和方法功能,結(jié)合實例形式較為詳細的分析了使用PHPUnit針對私有屬性和方法進行測試的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-06-06

最新評論

兖州市| 武陟县| 砀山县| 东明县| 永昌县| 吉林省| 衡东县| 井陉县| 万山特区| 奇台县| 秦皇岛市| 潼南县| 湖州市| 改则县| 土默特右旗| 绥宁县| 都昌县| 荥经县| 城固县| 肇州县| 天台县| 四子王旗| 隆回县| 柳江县| 达日县| 邮箱| 寻乌县| 建平县| 库伦旗| 平利县| 亚东县| 福清市| 永城市| 简阳市| 突泉县| 揭东县| 新密市| 涡阳县| 庆云县| 公安县| 任丘市|