电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

使用游標進行PHP SQLSRV查詢的方法與注意事項

瀏覽:329日期:2022-06-10 15:52:35
目錄
  • 游標類型
  • 選擇結果集中的行
  • SQLSRV Driver之服務端游標
  • SQLSRV Driver之客戶端游標

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

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

游標類型

您可以使用Scrollable來指定結果集的游標,以實現各種以順序訪問結果集中的任何行。下表列出了可以傳遞給Scrollable的選項。

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

如果查詢生成多個結果集,則Scrollable選項應用于所有結果集。

選擇結果集中的行

創建結果集后,就可以使用sqlsrv_fetch、sqlsrv_fetch_array或sqlsrv_fetch_object來指定行了。

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

參數描述SQLSRV_SCROLL_NEXT指定下一行。SQLSRV_SCROLL_PRIOR指定當前行之前的行。SQLSRV_SCROLL_FIRST指定結果集中的第一行。SQLSRV_SCROLL_LAST指定結果集中的最后一行。SQLSRV_SCROLL_ABSOLUTE指定指定的行抵消參數。SQLSRV_SCROLL_RELATIVE指定指定的行抵消當前行中的參數。

SQLSRV Driver之服務端游標

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

<?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之客戶端游標

客戶端游標是Microsoft Drivers for PHP for SQL Server 3.0版中添加的一項功能,它允許您在內存中緩存整個結果集。使用客戶端游標執行查詢后,行計數可用。

客戶端游標應該用于中小型結果集。對大型結果集使用服務器端游標。

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

使用SQLSRV驅動程序,可以使用sqlsrv_configure來設置ClientBufferMaxKBSize以配置保存結果集的緩沖區的大小。

sqlsrv_get_config返回ClientBufferMaxKBSize的值。

您還可以在php.ini文件中使用sqlsrv.ClientBufferMaxKBSize來設置最大緩沖區大小(例如,sqlsrv.clientBufferMaxKBSign=1024)。

以下示例顯示:

1、行計數始終可用于客戶端游標。

2、使用客戶端游標和批處理語句。

<?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)并配置了不同的客戶端緩沖區大小。

<?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";  
}  
?>

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

標簽: PHP
主站蜘蛛池模板: 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 压力喷雾干燥机,喷雾干燥设备,柱塞隔膜泵-无锡市闻华干燥设备有限公司 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 高通量组织研磨仪-多样品组织研磨仪-全自动组织研磨仪-研磨者科技(广州)有限公司 | PO膜_灌浆膜及地膜供应厂家 - 青州市鲁谊塑料厂 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 退火炉,燃气退火炉,燃气热处理炉生产厂家-丹阳市丰泰工业炉有限公司 | 乳化沥青设备_改性沥青设备_沥青加温罐_德州市昊通路桥工程有限公司 | 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 | 消电检公司,消电检价格,北京消电检报告-北京设施检测公司-亿杰(北京)消防工程有限公司 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 杭州翻译公司_驾照翻译_专业人工翻译-杭州以琳翻译有限公司官网 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 | 液氮罐_液氮容器_自增压液氮罐_杜瓦瓶_班德液氮罐厂家 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 钣金加工厂家-钣金加工-佛山钣金厂-月汇好 | 金属抛光机-磁悬浮抛光机-磁力研磨机-磁力清洗机 - 苏州冠古科技 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 电动高压冲洗车_价格-江苏速利达机车有限公司 | 高中学习网-高考生信息学习必备平台| 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 全自动真空上料机_粉末真空上料机_气动真空上料机-南京奥威环保科技设备有限公司 | 电抗器-能曼电气-电抗器专业制造商 | 电动高压冲洗车_价格-江苏速利达机车有限公司 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 全国国际学校排名_国际学校招生入学及学费-学校大全网 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 |