php - 使用 PDO/PHP 从一个存储过程中获取 2 个不同的结果
问题描述
使用 SQL Server 数据库构建 Symfony 4 API,我遇到了一个问题:我必须从一个存储过程中获取两个不同的结果。
第一个结果是一个数据数组,第二个结果只是一个 int 值。
我正在编写后端分页,这就是为什么我需要获取数据以及表中的总行数。
这是我的存储过程:
ALTER PROCEDURE [SP IDENTIFIER]
(
@Limit INT,
@Offset INT
)
AS
BEGIN
SET NOCOUNT ON;
SELECT
COUNT(*) AS 'TOTAL'
FROM DataBaseName
SELECT Field1, Field2, Field3
FROM DataBaseName
ORDER BY Field1 DESC
OFFSET @Offset ROWS
FETCH NEXT @Limit ROW ONLY
END
当我测试我的 API 时,它只返回我的第一个请求的结果(行数值)。
这是我的存储库方法:
public function getDatas($limit, $offset)
{
$request = "EXEC SPName ?, ?";
$answer = $this->_em->getConnection()->prepare($request);
$answer->bindParam(1, $limit);
$answer->bindParam(2, $offset);
$answer->execute();
return $answer->fetchAll();
}
你知道有什么方法可以让 PDO 返回他从请求中得到的所有结果吗?也许在 fetch 选项中,或者通过某种方式在 $answer 中执行 fetchAll 循环?
谢谢 !
解决方案
MS SQL Server supports stored procedures that can return more than one result set. With PHP and PDO you can retrieve these result sets with PDOStatement::nextRowset() method. It is important to know, that even if you have output parameters in your stored procedure, you need to fetch all result sets to get output values.
You may try with this:
public function getDatas($limit, $offset)
{
$request = "EXEC SPName ?, ?";
$answer = $this->_em->getConnection()->prepare($request);
$answer->bindParam(1, $limit);
$answer->bindParam(2, $offset);
$answer->execute();
do {
// Fetch records with $answer->fetchAll();
while ($answer->nextRowset());
}