PHP Conference Japan 2024

sqlsrv_next_result

(无版本信息可用,可能仅存在于 Git 中)

sqlsrv_next_result使指定语句的下一个结果处于活动状态

描述

sqlsrv_next_result(资源 $stmt): 混合

使指定语句的下一个结果处于活动状态。结果包括结果集、行计数和输出参数。

参数

stmt

正在其上调用下一个结果的语句。

返回值

如果成功检索到下一个结果,则返回true,如果发生错误,则返回false,如果不再有结果可供检索,则返回null

示例

示例 #1 sqlsrv_next_result() 示例

以下示例执行一个批处理查询,该查询插入到表中,然后从表中选择。这在语句上产生两个结果:一个用于 INSERT 影响的行数,另一个用于 SELECT 返回的行数。要获取 SELECT 返回的行,必须调用 sqlsrv_next_result() 以跳过第一个结果。

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

$query = "INSERT INTO Table_1 (id, data) VALUES (?,?); SELECT * FROM TABLE_1;";
$params = array(1, "some data");
$stmt = sqlsrv_query($conn, $query, $params);

// 在不调用 sqlsrv_next_result 的情况下使用第一个结果(INSERT 影响的行数)。
echo "受影响的行数: ".sqlsrv_rows_affected($stmt)."<br />";

// 移动到下一个结果并显示结果。
$next_result = sqlsrv_next_result($stmt);
if(
$next_result ) {
while(
$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
echo
$row['id'].": ".$row['data']."<br />";
}
} elseif(
is_null($next_result)) {
echo
"没有更多结果。<br />";
} else {
die(
print_r(sqlsrv_errors(), true));
}
?>

参见

添加注释

用户贡献的注释 1 条注释

chakin
10 年前
您可以使用 for 循环迭代结果

如果您知道应该有多少个结果,则会更容易,否则您可以在循环构造函数中放入一个大数字,并在完成后中断

<?
for ($i=0; $i< (大数或精确数); $i++)
{
$rows_affected = sqlsrv_rows_affected($q2);
if ($rows_affected === false)
{
echo '插入失败<br />\n';
} else if ( $rows_affected == -1) {
echo "无可用信息。<br />\n";
} else {
echo $rows_affected." 行已添加。<br />\n";
}

$next_result = sqlsrv_next_result($q2);

if (!$next_result)
{
break;
}
}
?>
To Top