PDO< - > SQL Server exec(在Laravel中)返回空数组

时间:2016-09-12 12:42:22

标签: php sql-server laravel pdo ssms

PHP,Laravel,调用

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

结果 - EMPTY ARRAY !!!

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

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

结果 - 有效表。

任何想法,为什么会发生这种情况都受到热烈欢迎

2 个答案:

答案 0 :(得分:2)

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

所以这是两步问题:

  1. 当存储过程参数不是EXPLICITLY设置为NULL / NOT NULL时,它们会被继承,导致异常的原因......
  2. 不是由PDO显示的(错误在Laravel PDO中)。
  3. 另外,您可能会看到此主题 PHP - PDOException is not thrown on error, an empty array returned (SQL Server) 我的同事在这个问题上做了比我更好的调查:)))

答案 1 :(得分:0)

试试这个:

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(...)部分和DB::raw("...")部分中的dd()部分和转储功能都可以获得;