【问题标题】:Calling mssql stored procedure using pdo sqlsrv drivers with multi queries inside procedure使用 pdo sqlsrv 驱动程序调用 mssql 存储过程,并在过程中进行多查询
【发布时间】:2018-12-11 04:46:58
【问题描述】:

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

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

提前致谢!!

【问题讨论】:

  • 没有你的代码很难帮助你,也许这个问题会帮助你:link
  • 如果您使用的是动作存储过程,那么您必须传递选择、插入或更新等动作。您可以这样做$result = DB::select('CALL Procedure_Name(?,?,?)', array($action,$val1, $val2)); return $result;这些?,?,?是您的过程参数,并且您必须在 laravel 模型中完成所有这些操作
  • @EmmanuelHdzDíaz 感谢您的回复,抱歉,但这里的隐私问题无法分享代码。我检查了你的链接,我们已经为 mysql 做了这件事,但现在我们正在寻找 mssql。
  • @AkhtarMunir 已经尝试过这个,但运气不好,它不适用于多结果行集。
  • 多行是什么意思?你在传递数组吗?

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


【解决方案1】:

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" );
}
...

?>

【讨论】:

    猜你喜欢
    • 2014-03-04
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 2013-01-31
    • 2014-09-16
    • 2018-03-02
    相关资源
    最近更新 更多