【问题标题】:PDO <-> SQL Server exec (in Laravel) returns empty arrayPDO <-> SQL Server exec(在 Laravel 中)返回空数组
【发布时间】:2017-01-19 21:47:12
【问题描述】:

PHP、Laravel、调用

$db->select("EXEC [dbo].[sp_StoredProc1] 1, 3, 1, '2016-06-12 00:00:00', '2016-09-12 00:00:00'");

结果 - 空数组!!!

通过 SQL Server Management Studio 调用相同的函数:

EXEC [dbo].[sp_StoredProc1] 1, 3, 1, '2016-06-12 00:00:00', '2016-09-12 00:00:00'

结果 - 有效表格。

非常感谢任何想法,为什么会发生这种情况

【问题讨论】:

  • 您的 SP 中有 SET NOCOUNT ON; 吗?

标签: php sql-server laravel pdo ssms


【解决方案1】:

试试这个:

DB::select(DB::raw("EXEC [dbo].[sp_StoredProc1] 1, 3, 1, '2016-06-12 00:00:00', '2016-09-12 00:00:00'");

您也可以尝试查看在 DB::select(...) 部分和 dd() 死亡和转储函数中的 DB::raw("...") 部分时会得到什么;

【讨论】:

    【解决方案2】:

    造成这种情况的原因 - 是 MS SQL Server 的 PHP PDO 中的错误。 尽管发生了异常,但不会抛出异常。 此处描述了非常相似的情况: http://www.sqlservercentral.com/Forums/Topic1754869-392-1.aspx

    所以这是一个两步问题:

    1. 当存储过程参数未显式设置为 NULL/NOT NULL 时,它们会被继承,导致异常的原因...
    2. PDO 未显示(该错误在 Laravel PDO 中)。

    另外,你可能会看到这个帖子 PHP - PDOException is not thrown on error, an empty array returned (SQL Server) 我的同事在这个问题上的调查比我做得更好:)))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多