PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
情景描述
假设我们需要从MsSQL Server 2012的数据库中获取多个结果集,并且需要获取到存储过程的output参数,那么我们需要如何实现呢?
实现步骤
- 连接数据库
在使用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();
}
- 定义并调用存储过程
下面是一个调用存储过程获取多结果集以及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参数的值。
- 完整示例代码
下面是一个完整示例代码,用于展示如何获取多个结果集和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 评论