在Php MS Sql中调用存储过程和显示输出

时间:2017-02-16 03:36:43

标签: php sql-server php-7

我有一个问题,成功运行程序后显示存储过程的输出...我希望每个人都可以帮助我....这里我的存储过程..

$sql = "EXEC [dbo].[sp_mRetailerRegInfo_Add] '$var1','$var2','$var3','$var4','',''";

我的SP中的示例数据

 EXEC sp_mRetailerRegInfo_Add 'asdf','asdf','bacc@abc.com','123', @RetailerId output, @ErrorCode output

这是我的示例代码.i可以运行该程序,但它不显示输出

<?php

$serverName = "localhost";

$connectionInfo = array( "Database"=>"db", "UID"=>"user", "PWD"=>"pass");
$conn = sqlsrv_connect( $serverName, $connectionInfo);


if( $conn ) {
     echo "Connection established.<br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}



//-----------------------------------------------
// Perform operations with connection.
//-----------------------------------------------
$sql = "EXEC [dbo].[sp_mRetailerRegInfo_Add] '$var1','$var2','$var3','$var4','',''";


$result = sqlsrv_query($conn, $sql);
if (!$result) {
    echo 'Your code is fail.';
}
else {
    echo 'Success!';
    echo $result;
}

?>

输出将是这样的(ID0001),但我得到像这样的输出

  

已建立连接。

     

成功!资源ID#3

2 个答案:

答案 0 :(得分:1)

使用存储过程,您将使用要在过程中为其分配值的OUTPUT参数。该过程完成后,您将访问该参数并使用它所需的内容。

您可以阅读MSDN网站上的Return Data from a Stored Procedure,以了解如何编写存储过程。

您需要查看this already answered question,其中提供了有关如何从OUTPUT访问PHP参数的详细信息。你会想要第二个答案:

  

执行的第二个参数需要是真的,而不是conn。这个   应该工作:

$conn = mssql_connect('server', 'user', 'pass');
mssql_select_db('db', $conn);

$procedure = mssql_init('usp_StoredProc', $conn);

$tmpVar1 = 'value';
$tmpVar2 = 'value2';

$outVar1 = '';
$outVar2 = '';

mssql_bind($procedure, "@var1", $tmpVar1, SQLVARCHAR, false, false);
mssql_bind($procedure, "@var2", $tmpVar2, SQLVARCHAR, false, false);

mssql_bind($procedure, "@outVar1", $outVar1, SQLVARCHAR, true);
mssql_bind($procedure, "@outVar2", $outVar2, SQLVARCHAR, true);

mssql_execute($procedure,true);

print($outVar1);
print($outVar2);

如果您可以提供存储过程的定义,我可以更详细地说明如何设置PHP来电。

答案 1 :(得分:0)

嗯,这是可能的。有一个名为mssql_bind的函数用于将值绑定到PHP变量

调用SP并存储输出。试试这样的事情

DECLARE @appout int; -- variable to hold the data returned by SP.

EXEC checkFollowing 10,20, @output = @appout OUTPUT; -- This is how i will call a SP.

@appout - will hold the data returned by the procedure.

所以你可以执行输出参数,如下所示:

$outVar1 = '';

mssql_bind($procedure, "@appout", $outVar1, SQLVARCHAR, true);

mssql_execute($procedure,true);

print($outVar1);