PHP Conference Japan 2024

sqlsrv_num_rows

(沒有版本資訊,可能只在 Git 中)

sqlsrv_num_rows擷取結果集中的列數

說明

sqlsrv_num_rows(資源 $stmt): 混合

擷取結果集中資料列的數量。此函式需要使用靜態或鍵集游標建立的語句資源。如需詳細資訊,請參閱 Microsoft SQLSRV 文件中的 sqlsrv_query()sqlsrv_prepare()» 指定游標類型和選取資料列

參數

stmt

要返回資料列數量的語句。語句資源必須使用靜態或鍵集游標建立。如需詳細資訊,請參閱 Microsoft SQLSRV 文件中的 sqlsrv_query()sqlsrv_prepare()» 指定游標類型和選取資料列

傳回值

成功時傳回擷取的資料列數量,發生錯誤時傳回 false。如果使用正向游標(預設值)或動態游標,則會傳回 false

範例

範例 #1 sqlsrv_num_rows() 範例

<?php
$server
= "serverName\sqlexpress";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password" );
$conn = sqlsrv_connect( $server, $connectionInfo );

$sql = "SELECT * FROM Table_1";
$params = array();
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = sqlsrv_query( $conn, $sql , $params, $options );

$row_count = sqlsrv_num_rows( $stmt );

if (
$row_count === false)
echo
"擷取資料列數量時發生錯誤。";
else
echo
$row_count;
?>

另請參閱

新增註釋

使用者貢獻的註釋 2 則註釋

wazz3r at gmail dot com
11 年前
如果您需要良好的效能,請盡量避免使用此函式。在選項中指定「Scrollable」將會使您的查詢執行時間非常長。如果您的結果包含少於 5000 列(可能因硬體而異),則不使用「Scrollable」並在 PHP 中迴圈處理它們會更快。

如果您需要檢查結果是否包含列,請使用「sqlsrv_has_rows()」,此函式在沒有「Scrollable」的情況下也能正常運作。移除所有「Scrollable」查詢後,我的頁面載入時間從 900 毫秒縮短到 60 毫秒。

為了示範,以下是一個返回 100 列的查詢
<?php
for($i = 0; $i < 100; $i++) {
$q = "SELECT sku,name FROM product WHERE visible = 1";
$result = sqlsrv_query($db,$q,array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));

while(
$row = sqlsrv_fetch_array($result)) {}
}
?>
這大約需要 10 秒!也就是每秒 10 個查詢。

現在,如果我們移除「Scrollable」
<?php
for($i = 0; $i < 100; $i++) {
$q = "SELECT sku,name FROM product WHERE visible = 1";
$result = sqlsrv_query($db,$q);

while(
$row = sqlsrv_fetch_array($result)) {}
}
?>
這將在 300 毫秒內運行,大約每秒 334 個查詢!
smhahmadi
11 年前
請注意,當您將 MS SQL Server PHP 驅動程式從 MSSQL 遷移到 SQLSRV 時,如果您使用了 mssql_num_rows,將它們替換為 sqlsrv_num_rows 並將 mssql_query($query, $mssql_link) 替換為 sqlsrv_query($sqlsrv_link, $query) 呼叫將導致您的 sqlsrv_num_rows 呼叫失敗。為了避免這種情況,您應該在呼叫 sqlsrv_query 時指定靜態、鍵集或緩衝資料指標(SQLSRV 3.0 以後提供緩衝資料指標)。例如:
<?php
mssql_query
($query, $mssql_link);
// 等同於
sqlsrv_query($sqlsrv_link, $query, array(), array('Scrollable' => 'buffered'));
?>
使用緩衝游標比使用靜態或鍵集游標更接近簡單的 mssql_query 呼叫,因為它會將整個結果集快取到用戶端記憶體中。
To Top