PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解

PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解

情景描述

假设我们需要从MsSQL Server 2012的数据库中获取多个结果集,并且需要获取到存储过程的output参数,那么我们需要如何实现呢?

实现步骤

  1. 连接数据库

在使用pdo连接数据库中,需要先准备好连接数据库的信息,例如下面的代码:

$Server="ServerName";
$port=1433;
$User="UserName";
$Pass="PassWord";
$Database="DataBaseName";

try {
   $DBH = new PDO("mssql:host=$Server;port=$port;dbname=$Database", $User, $Pass); 
   $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
}
catch(PDOException $e) {
    echo $e->getMessage(); 
}
  1. 定义并调用存储过程

下面是一个调用存储过程获取多结果集以及output参数的示例代码:

$sql = "DECLARE ";
$sql.= "@output1 INT, ";
$sql.= "@output2 INT ";
$sql.= "EXEC stored_proc_name @param1=:param1, @param2=:param2, @output1=:output1 OUTPUT, @output2=:output2 OUTPUT; ";
$sql.= "SELECT @output1 as output1, @output2 as output2";

$stmt = $DBH->prepare($sql);
$stmt->bindParam(':param1', $param1);
$stmt->bindParam(':param2', $param2);
$stmt->bindParam(':output1', $output1, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 4000); 
$stmt->bindParam(':output2', $output2, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 4000); 
$stmt->execute();

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    //处理结果集
}

$output1 = $stmt->fetch(PDO::FETCH_ASSOC)['output1'];
$output2 = $stmt->fetch(PDO::FETCH_ASSOC)['output2'];

在上面的代码中,我们首先定义了两个output参数,然后使用执行存储过程的SQL串来执行存储过程,并通过bindParam函数来绑定参数,通过execute函数执行存储过程,最后使用fetch函数来获取结果集和output参数的值。

  1. 完整示例代码

下面是一个完整示例代码,用于展示如何获取多个结果集和output参数的值:

$Server="ServerName";
$port=1433;
$User="UserName";
$Pass="PassWord";
$Database="DataBaseName";

try {
   $DBH = new PDO("mssql:host=$Server;port=$port;dbname=$Database", $User, $Pass); 
   $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
}
catch(PDOException $e) {
    echo $e->getMessage(); 
}

//定义参数
$param1 = "param1";
$param2 = "param2";
$output1 = 0;
$output2 = 0;

//执行存储过程
$sql = "DECLARE ";
$sql.= "@output1 INT, ";
$sql.= "@output2 INT ";
$sql.= "EXEC stored_proc_name @param1=:param1, @param2=:param2, @output1=:output1 OUTPUT, @output2=:output2 OUTPUT; ";
$sql.= "SELECT @output1 as output1, @output2 as output2";

$stmt = $DBH->prepare($sql);
$stmt->bindParam(':param1', $param1);
$stmt->bindParam(':param2', $param2);
$stmt->bindParam(':output1', $output1, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 4000); 
$stmt->bindParam(':output2', $output2, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 4000); 
$stmt->execute();

//处理结果集
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    //处理结果集
}

//获取output参数
$output1 = $stmt->fetch(PDO::FETCH_ASSOC)['output1'];
$output2 = $stmt->fetch(PDO::FETCH_ASSOC)['output2'];

echo "output1: " . $output1 . "\n";
echo "output2: " . $output2 . "\n";

总结

在使用PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)时,需要注意在pdo中绑定参数的方式以及获取结果集和output参数的方式。以上示例代码可以作为参考,方便开发者在实现时借鉴使用。

本文链接:https://my.lmcjl.com/post/15054.html

展开阅读全文

4 评论

留下您的评论.