php - 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'
可能是什么问题,我该如何解决?
解决方案
我不熟悉 Laravel,但看起来您正在创建一个包含 3 个值的值数组,但您只在查询中发送了 2 个参数。应该是
$data = DB::select('exec SP_NAME ?, ?, ?', $values);
您不会从 SQL Server 收到错误,因为您将@FechaIni
和定义@FechaFin
为可选参数。
推荐阅读
- mocha.js - mochawesome 的问题:TypeError:无法设置未定义的属性“testsRegistered”
- amazon-redshift - 无法使用 ecto 在 redshift 中创建模式迁移表
- python - python argcomplete 和 pyinstaller
- ansible - 当字典存在但不包含任何元素时条件总是失败时的 Ansible
- python - SMbus 的第二个版本是否正确?
- c# - 使用 azure ad 更新 asp.net mvc 应用程序后的身份验证问题
- apache-spark - Spark JobEnd Listner 从 hdfs 路径移动源文件导致文件未找到异常
- javascript - 如何为 mongoDB 文档编写有效的 undo/redo 机制?
- r - 根据R中另一列中的值设置一列的值
- android - 迁移到 AndroidX 后的一些错误