我试图从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。
也许有人知道为什么? 感谢
答案 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