【问题标题】:Call SQL Server Stored procedure with input and output parameter in php在php中使用输入和输出参数调用SQL Server存储过程
【发布时间】:2018-06-05 17:35:17
【问题描述】:

我想在单个存储过程下运行 10 个选择查询,并使用输出参数分别获取每个选择查询的结果,并使用 php 和 sqlsrv 库将该输出显示到前端。如何获得?

【问题讨论】:

  • 通过在您的过程中运行 10 个选择语句。其中每一个都会填充您的一个输出参数。

标签: php sql-server sqlsrv


【解决方案1】:

这是基本但有效的示例。

数据库部分:

USE [TestDatabase]
CREATE PROCEDURE [TestProcedure]
    @P1 int OUTPUT,
    @P2 int OUTPUT,
    @P3 int OUTPUT,
    @P4 int OUTPUT,
    @P5 int OUTPUT,
    @P6 int OUTPUT,
    @P7 int OUTPUT,
    @P8 int OUTPUT,
    @P9 int OUTPUT,
    @P10 int OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    -- It's very basic example.
    -- Put here your own SQL statements, which must return single values
    SELECT @P1 = 1
    SELECT @P2 = 2
    SELECT @P3 = 3
    SELECT @P4 = 4
    SELECT @P5 = 5
    SELECT @P6 = 6
    SELECT @P7 = 7
    SELECT @P8 = 8
    SELECT @P9 = 9
    SELECT @P10 = 10
END

PHP部分:

<?php
// Connection
$server = 'server\instance,port';
$cinfo = array(
    "Database"=>'TestDatabase',
    "UID"=>"User",
    "PWD"=>"Password"
);
$conn = sqlsrv_connect($server, $cinfo);
if( $conn === false )
{
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
}

// Call stored procedure
$sql = '{call TestProcedure(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}';
$p1 = 0;
$p2 = 0;
$p3 = 0;
$p4 = 0;
$p5 = 0;
$p6 = 0;
$p7 = 0;
$p8 = 0;
$p9 = 0;
$p10 = 0;
$params = array(
    array(&$p1, SQLSRV_PARAM_INOUT),
    array(&$p2, SQLSRV_PARAM_INOUT),
    array(&$p3, SQLSRV_PARAM_INOUT),
    array(&$p4, SQLSRV_PARAM_INOUT),
    array(&$p5, SQLSRV_PARAM_INOUT),
    array(&$p6, SQLSRV_PARAM_INOUT),
    array(&$p7, SQLSRV_PARAM_INOUT),
    array(&$p8, SQLSRV_PARAM_INOUT),
    array(&$p9, SQLSRV_PARAM_INOUT),
    array(&$p10, SQLSRV_PARAM_INOUT)
);
$stmt = sqlsrv_query($conn, $sql, $params);
if( $stmt === false ) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}

// Output parameters are available after consuming all resultsets.
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);

// Output
echo 'Parameters values'."</br>";
echo 'Parameter 1: '.$p1."</br>";
echo 'Parameter 2: '.$p2."</br>";
echo 'Parameter 3: '.$p3."</br>";
echo 'Parameter 4: '.$p4."</br>";
echo 'Parameter 5: '.$p5."</br>";
echo 'Parameter 6: '.$p6."</br>";
echo 'Parameter 7: '.$p7."</br>";
echo 'Parameter 8: '.$p8."</br>";
echo 'Parameter 9: '.$p9."</br>";
echo 'Parameter 10: '.$p10."</br>";
?>

【讨论】:

  • 在使用您提供的解决方案运行代码后,我收到一个错误,因为“Procedure or function sp_get has too many arguments specified.”这里 sp_get 是存储过程名称。
  • @Hariprasad Advids 你能显示程序代码吗?或者,参数个数是多少?
  • 共有10个参数,我想将emp id作为输入参数传递给每个sql查询
  • @Hariprasad Advids 我很难告诉你这个错误是什么。我必须至少有你的参数定义,因为它们是在存储过程中定义的。
【解决方案2】:

我不知道如何在 PHP 中执行此操作,但您通常可以将输出参数替换为结果集,这不需要任何特殊的客户端 API。

EG

declare @count1  int = (select count(*) from sys.objects)
declare @count2  int = (select count(*) from sys.columns)

select * 
from (values ('count1', @count1),('count2', @count2) ) as t(pn,pv)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2019-10-08
    • 2018-08-20
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多