gpt4 book ai didi

php - SQLSRV 和存储过程中的多项选择

转载 作者:可可西里 更新时间:2023-11-01 00:14:32 38 4
gpt4 key购买 nike

我有一个存储过程,它创建一个临时表 (#test),用另一个表中的数据填充它,在这个临时表上运行 3 次选择并删除它。

原始表超过 20 GB,3 个 SELECT 语句包含原始 SP 上的许多不同条件。

我正在使用 SQLSRV 从 PHP 执行 SP,但是我只能设法检索前 2 个结果集。

如果我从 MSSMS 运行 SP,它将正常运行并按预期返回 3 个结果集。但是从 PHP 中它只会返回 2(尝试了所有组合)。

不确定这是否是驱动程序 sqlsrv_fetch_array 或 sqlsrv_next_result 的问题。

SP 的示例(选择语句太大,所以我将恢复它们):

CREATE PROCEDURE sp_transfers
@dt date,
@campaign varchar(16)
AS
BEGIN
CREATE TABLE #test ( [column definitions...] )

BEGIN
INSERT INTO #test SELECT * FROM sometable WHERE dt = @dt AND campaign = @campaign

SELECT * FROM #test ...
SELECT * FROM #test ...
SELECT * FROM #test ...

DROP TABLE #test
END

现在从 PHP 这是我的测试代码:

$q = sqlsrv_query($conn,"EXEC sp_transfers @dt='2013-10-01',@campaign='1234'");

sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as expected - 1st resultset
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as expected - 2nd resultset
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); // EMPTY

但是,如果我尝试这样做,它会起作用:

sqlsrv_next_result($q);
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as expected - 2nd resultset
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); // OK - 3rd resultset shows up

这个组合也是一样的:

sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as expected - 1st resultset
sqlsrv_next_result($q);
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); // OK - 3rd resultset shows up

我是不是做错了什么?或者有没有办法从单个 SP 中获取 3 个结果集。

提前致谢。

最佳答案

我实际上只是遇到了类似的问题并设法使以下工作正常:

$result = array();

// Get return value
do {
while ($row = sqlsrv_fetch_array($query)) {
// Loop through each result set and add to result array
$result[] = $row;
}
} while (sqlsrv_next_result($query));

print_r($result);

do-while 循环将遍历所有结果(而不必手动执行此操作)。循环 sqlsrv_fetch_array() 似乎是必不可少的,所以我认为这是真正的答案。

关于php - SQLSRV 和存储过程中的多项选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169124/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com