2024 年 PHP 开发者大会 日本站

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 条注释

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 qps..

现在如果我们删除“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 qps!
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