检索存储过程返回的数据:Php&;MS-SQL服务器


Retrieve data returned by a Stored Procedure: Php & MS SQL SERVER

这个问题涉及:

PHP版本5.3.6

用于SQL Server 的PHP的Microsoft驱动程序

我正在尝试从存储过程中正确检索数据。

此问题假定存在以下存储过程:

CREATE PROCEDURE test_procedure
AS
     BEGIN
           SET NOCOUNT ON
           --A bunch of SQL statements
           --More SQL statements
           SELECT 'Doctor Who Rules!'
     END

我尝试了以下代码,它运行在我的所有命令中,但不会从最终的SELECT返回数据。

$sql = "EXEC test_procedure;";
$result = sqlsrv_query($conn,$sql);
$next_result = sqlsrv_next_result($result); // returns a boolean
$row = sqlsrv_fetch_array($result);

使用sqlsrv_execute也不适用于上述代码。

如何通过PHP返回上面存储过程生成的数据?

谢谢。

附录#1(经典ASP副本(

sqlCMD = "EXEC test_procedure;"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open _ConnectionString_Variable_
Set rs = conn.Execute(sqlCMD)

我会得到一个具有一行的记录集,该记录集具有一个具有数据"的字段;统治博士">

几分钟前我刚刚遇到了同样的问题,这个线程为我指明了一个可行的解决方案(我不确定它是否是一个"正确"的解决方案,但它有效(。

事实上,问题并不是由"SET NOCOUNT ON"引起的。在我的例子中,调试后留下了几个PRINT语句。

看起来SP的任何输出(实际记录集除外(都会导致此问题。

我解决了这个问题。

如果从存储过程中提交SET NOCOUNT ON,那么我的示例中的PHP代码将正常工作。过程中有了SET NOCOUNT ON,就没有返回到PHP的数据流,因此,最后一个SELECT的结果永远不会返回。

因此,此存储过程。。。

CREATE PROCEDURE test_procedure
     @foo varchar(25)
AS
     BEGIN
          --A bunch of SQL statements
          --More SQL statements
          SELECT @foo
END

将与此PHP完美配合。。。

$sql = "EXEC test_procedure 'Dr. Who Rules!';";
$result = sqlsrv_query($conn,$sql);
$next_result = sqlsrv_next_result($result);
$row = sqlsrv_fetch_array($result);

您最终会得到一个字符串为"Doctor Who Rules!"的记录集