PHP得到mssql的存储过程的输出参数功能实现


在PHP中,获取MSSQL(Microsoft SQL Server)存储过程的输出参数通常需要使用`sqlsrv`扩展。以下是一个示例代码,展示了如何调用一个包含输出参数的MSSQL存储过程,并获取这些参数的值。

首先,确保你的PHP环境已经安装了`sqlsrv`扩展。

接下来,这是一个简单的例子,假设我们有一个名为`GetUserInfo`的存储过程,它接受一个输入参数(比如用户ID),并输出一个或多个参数(比如用户名和年龄)。


<?php
$serverName = "your_server_name"; // 服务器名
$connectionInfo = array( "Database"=>"your_database_name", "UID"=>"your_username", "PWD"=>"your_password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
    echo "连接成功。\n";

    // 准备SQL语句,调用存储过程
    $sql = "{call GetUserInfo (?, ?, ?)}";
    $params = array(
        array($userId, SQLSRV_PARAM_IN), // 输入参数
        array(&$userName, SQLSRV_PARAM_OUT), // 输出参数
        array(&$userAge, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT, SQLSRV_SQLTYPE_INTEGER) // 输出参数,指定PHP类型和SQL类型
    );

    // 调用存储过程
    $stmt = sqlsrv_query($conn, $sql, $params);

    if( $stmt === false ) {
        die( print_r( sqlsrv_errors(), true));
    }

    // 获取输出参数的值
    echo "用户名: " . $userName . "\n";
    echo "年龄: " . $userAge . "\n";

    // 释放语句和连接资源
    sqlsrv_free_stmt($stmt);
    sqlsrv_close($conn);
} else {
    echo "连接失败。\n";
    die( print_r( sqlsrv_errors(), true));
}
?>

**注意**:

- `$userId` 应该被替换为你想要查询的用户ID的实际值。

- 输出参数`$userName`和`$userAge`在调用`sqlsrv_query`之前需要被声明,并设置为引用传递(通过在变量名前加上`&`)。

- 输出参数的类型可以通过`SQLSRV_PHPTYPE_`和`SQLSRV_SQLTYPE_`常量来指定,这有助于确保PHP变量正确地映射到SQL Server数据类型。

- 这个例子假设`GetUserInfo`存储过程接受一个输入参数和两个输出参数。根据你的实际存储过程,你可能需要调整SQL语句和参数数组。

- 始终检查`sqlsrv_query`的返回值来确认存储过程是否成功执行,并使用`sqlsrv_errors`来捕获和报告任何错误。