首页 > 解决方案 > Laravel 存储过程调用后返回空数组

问题描述

我正在使用 Laravel 5.6,我有以下代码

 $values = [1, "2018-08-10", "2018-08-11"];
 $data = DB::select('exec SP_NAME ?, ?', $values);

 dump($data);

这是我的存储过程:

ALTER PROCEDURE [dbo].[SP_NAME]
@Opc int,
@FechaIni nvarchar(20)=null,
@FechaFin nvarchar(20)=null
AS
BEGIN
    if @opc=1
    begin
        SELECT * from table where convert(date, datetimeField) between @FechaIni and @FechaFin
    end
END

如果我在 MSSQL Server 上执行查询,一切正常。当我从 Laravel 执行 SP 时,没有错误消息,只是一个空数组。

测试和使用代码我发现问题是当我发送多个参数时,例如我为此更改了我的选择查询:

SELECT * from table where convert(date, datetimeField) between '2018-08-10' and '2018-08-11'

可能是什么问题,我该如何解决?

标签: phpsql-serverlaravel-5.6

解决方案


我不熟悉 Laravel,但看起来您正在创建一个包含 3 个值的值数组,但您只在查询中发送了 2 个参数。应该是

$data = DB::select('exec SP_NAME ?, ?, ?', $values);

您不会从 SQL Server 收到错误,因为您将@FechaIni和定义@FechaFin为可选参数。


推荐阅读