sqlsrv_num_rows

(无版本信息可用,可能只在 Git 中)

sqlsrv_num_rows检索结果集中的行数

描述

sqlsrv_num_rows(资源 $stmt): 混合

检索结果集中的行数。此函数要求语句资源使用静态或键集游标创建。有关更多信息,请参阅 sqlsrv_query()sqlsrv_prepare()» 指定游标类型和选择行 在 Microsoft SQLSRV 文档中。

参数

stmt

返回行计数的语句。语句资源必须使用静态或键集游标创建。有关更多信息,请参阅 sqlsrv_query()sqlsrv_prepare()» 指定游标类型和选择行 在 Microsoft SQLSRV 文档中。

返回值

成功时返回检索到的行数,如果发生错误则返回 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 个备注

9
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 个查询!
5
smhahmadi
11 年前
请注意,在将您的 MS SQL Server PHP 驱动程序从 MSSQL 迁移到 SQLSRV 时,如果您使用了 mssql_num_rows,用 sqlsrv_num_rows 替换它们,并用 sqlsrv_query($sqlsrv_link, $query) 调用替换 mssql_query($query, $mssql_link) 调用会导致您的 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