使用pdo sqlsrv驱动程序在过程内部进行多个查询来调用mssql存储过程

时间:2018-12-11 04:46:58

标签: php laravel laravel-5 sqlsrv mssql-jdbc

在laravel中使用sqlsrv驱动程序调用存储过程时,我遇到了问题。程序内部有多个查询,这些查询具有选择和插入的组合。我无法在此处共享代码作为其隐私问题。

所以任何人都可以共享可以与laravel一起使用的代码,以调用具有多个结果行集的mssql过程。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

MS SQL Server支持可以返回多个结果集的存储过程。 使用PHP和PDO,您可以使用PDOStatement::nextRowset()方法检索这些结果集。 重要的是要知道,如果存储过程中有输出参数,则需要获取所有结果集以获取输出值。

如果Laravel不支持nextRowset(),则可以尝试在连接实例上使用getPdo()方法获取基础PDO实例,并将该实例用于语句执行:

<?php

...
$pdo = DB::connection()->getPdo();
try {
    $sql = "{CALL usp_TestProcedure(?)}";
    $param = 'ParamValue';
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(1, $param);
    $stmt->execute();
    do {
       while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
          print_r($row, true); 
          echo '<br>';
       }
    } while ($stmt->nextRowset());  
} catch( PDOException $e ) {
    die( "Error executing query" );
}
...

?>