PHP获取存储过程的返回值

标签 php sql-server stored-procedures pdo sqlsrv

我很高兴通过 PDO 使用 SQL Server 来处理旧版 PHP 应用程序。

在 PHP 中如何检索使用 RETURN 的存储过程的返回值语句作为输出 channel ?

示例程序

CREATE PROCEDURE [dbo].[mleko_test]
    @param INT
AS
  BEGIN
    RETURN @param * 3;
  END
GO

如果可能的话,我宁愿不修改程序。


我知道有类似的问题,但它们不涵盖此案例

最佳答案

执行如下存储过程:“exec ?=mleko_test(?)”

工作示例:

<?php
#------------------------------
# Connection info
#------------------------------
$server = 'server\instance,port';
$database = 'database';
$uid = 'user';
$pwd = 'password';

#------------------------------
# With PDO
#------------------------------
try {
    $conn = new PDO("sqlsrv:server=$server;Database=$database", $uid, $pwd);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch ( PDOException $e ) {
    die ( "Error connecting to SQL Server" );
}

try {
    $sql = "exec ? = mleko_test (?)";
    $param = 3;
    $spresult = 0;
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(1, $spresult, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE);
    $stmt->bindParam(2, $param);
    $stmt->execute();
} catch ( PDOException $e ) {
    die ( "Error connecting to SQL Server" );
}

$stmt = null;
$conn = null;

echo 'Stored procedure return value (with PDO): '.$spresult."</br>";

#------------------------------
# Without PDO
#------------------------------
$cinfo = array (
    "Database" => $database,
    "UID" => $uid,
    "PWD" => $pwd
);

$conn = sqlsrv_connect($server, $cinfo);
if ( $conn === false )
{
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
}

$sql = "exec ? = mleko_test (?)";
$param = 3;
$spresult = 0;
$params = array(   
    array(&$spresult, SQLSRV_PARAM_OUT), 
    array($param, SQLSRV_PARAM_IN),  
); 
$stmt = sqlsrv_query($conn, $sql, $params);
if ( $stmt === false ) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}

while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
}

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);

echo 'Stored procedure return value (without PDO): '.$spresult."</br>";
?>

注释:

使用 PHP 7.1.12 和 PHP SQL Server 驱动程序(pdo_sqlsrv 版本 4.3.0+9904)进行测试。

关于PHP获取存储过程的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51555221/

相关文章:

php - Yii cdbcriteria 选择关系的列

php shell_exec() 输出得到一个文本文件

sql - 如何在使用sql时将日期的年份增加1

c# - 在 Asp.net core 启动时创建的 SQL 分布式缓存

python - 如何在 Mysql Python 连接器中使用一个转义参数

PHP cURL 未加载 Windows 8 64 位

php - Jquery 移动 HTTPS 失败

sql-server - 为什么十进制的精度范围宽度不同?

java - 没有找到适合 setString 的方法

php - 重用准备好的语句会产生段错误