在laravel 5

时间:2017-06-20 07:13:27

标签: mysql laravel stored-procedures

我试图从Laravel项目调用MySQL存储过程。我的存储过程有两个IN和两个Out参数。 这是我的电话:

$procedure = DB::statement('CALL Table.Calculate("'.$Id.'", "'.$orderId.'",  @name,  @payout)');

当我执行var_dump过程时,我得到bool(true)。

这是我的sotred程序

 PROCEDURE table.Calculate(IN advid int, In cid INT,  OUT intTotalPayment INT, OUT TotalRevenue INT)
BEGIN
  SELECT SUM(Amount) INTO intTotalPayment
        FROM table.Transactions
        WHERE ID = advid;

  SELECT SUM(Payout) INTO TotalRevenue
        FROM table.Orders
        WHERE orderId= cid;

END

但我无法获得@name和@payout。

也许有人知道为什么? 感谢

2 个答案:

答案 0 :(得分:0)

使用select而不是语句

$procedure = DB::select('CALL Table.Calculate("'.$Id.'", "'.$orderId.'",       

@name,  @payout)');

用以下

替换你的sp
 PROCEDURE table.Calculate(IN advid int, In cid INT,  OUT intTotalPayment INT, OUT TotalRevenue INT)
BEGIN
  SELECT SUM(Amount) INTO intTotalPayment
        FROM table.Transactions
        WHERE ID = advid;

  SELECT SUM(Payout) INTO TotalRevenue
        FROM table.Orders
        WHERE orderId= cid;
  SELECT intTotalPayment,TotalRevenue;

END

答案 1 :(得分:0)

使用PHP Laravel框架运行Microsoft SQL Server存储过程(MS SQL Server)。 如果您尝试使用Laravel Model运行SP,则可以使用以下两种方法。

$submit = DB::select(" EXEC ReturnIdExample ?,?", array( $paramOne ,$paramTwo ) ); 

$submit = DB::select(" EXEC ReturnIdExample $paramOne,$paramTwo ");

如果要传递Varchar参数,请使用以下命令:

$submit = DB::select(" EXEC ReturnIdExample '$paramOne', '$paramTwo' ");

如果您只是传递INT或BIGINT的参数,则此方法应该起作用,并且您可以从SP获取返回值:

$submit = DB::select(" EXEC ReturnIdExample $paramOne,$paramTwo ");

我的原始答案: Laravel Model SQL Server: Get Output Parameters from Stored Procedure