php用存储过程 查询sql server的数据库,存储过程有两个结果集,第一个是总数,第二个是数据。

$sql = " DECLARE @return_value int
EXEC @return_value =Pager 50,1,'*','表名',' ','','id desc'
SELECT 'Value' = @return_value";
//echo $sql;exit;
$result =odbc_exec($this->connect, $sql);
$arr = [];
while ($row = odbc_fetch_array($result))
{
//这里的$row只有总数
foreach ($row as $k => $v) {
$row[$k] = iconv('GB2312','UTF-8',$v); var_dump($row);
}exit;
array_push($arr, $row);
}
图片说明


根据你提供的代码和问题描述,有以下几点需要注意:

  1. 存储过程名称是 Pager,需要确保这个存储过程已经被正确创建在 SQL Server 数据库中。

  2. 执行的 SQL 语句使用了 EXECUTE 命令来调用 Pager 存储过程,并将结果赋值给 @return_value 变量。根据你提供的代码,只输出了 @return_value 变量的值,而没有输出第二个结果集的数据。如果需要输出数据集,可以对上面的 SQL 语句进行修改:

$sql = "DECLARE @return_value INT;
        EXEC @return_value = Pager 50,1,'*','表名','','','id DESC';
        SELECT * FROM 表名;
        SELECT 'Value' = @return_value";

这样就可以获取到存储过程返回的第一个结果集(总数)和第二个结果集(数据集)。

  1. 代码中使用了 odbc_exec 函数来执行 SQL 语句,需要确保 PHP 安装了 ODBC 扩展,且已经正确连接到 SQL Server 的数据库。

  2. 代码中使用了 iconv 函数将结果集中的 GB2312 编码转换为 UTF-8 编码。需要根据实际情况确认数据库中的字符集类型,确保转换正确。

总的来说,可以按照以上几点进行排查,如果还有问题可以提供更详细的信息。