Laravel SQL Server 存储过程输出


laravel sql server stored procedure output

我已经创建了一个SQL存储 生成如下:

USE [xxx]
GO
/****** Object:  StoredProcedure [dbo].[ResultsByRegionAndDate]    Script Date: 02/25/2016 14:29:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ResultsByRegionAndDate]
    @Region VARCHAR(10),
    @DayD DATETIME,
    @DaySpin DATETIME OUTPUT
AS
BEGIN
    /* logic here */
END

现在,在我的Laravel项目中,尽管我已经尝试了很多方法来获得存储产品的输出,但仍然失败了。

$region = 'BAC';
$ngay = '2016-02-25';
$pdo = DB::connection()->getPdo();
$stmt = $pdo->prepare('DECLARE @DaySpin datetime EXEC dbo.ResultsByRegionAndDate ?, ?, @DaySpin');
$stmt->bindParam(1, $region);
$stmt->bindParam(2, $ngay);
$stmt->bindParam(3, $out);
$stmt->execute();
$search = array();
do {
    $search = $stmt->fetchAll(PDO::FETCH_ASSOC);
} while ($stmt->nextRowset());
return $out; // to see the result

当代码运行时,$out为空,我不知道如何从存储的产品中获取输出。

有没有办法在不修改存储产品的情况下获得输出?

请帮忙

经过几个小时的工作,我找到了这种情况的解决方案,如果有人像我一样有同样的问题,可能会使用它来解决它。

这里的问题是我对读取输出参数的方式是错误的,这是正确的方法。

$out = '';
$pdo = DB::connection()->getPdo();
$stmt = $pdo->prepare('DECLARE @NgayQuay datetime; EXEC dbo.ResultsByRegionAndDate ?,?, @NgayQuay OUTPUT');
$stmt->bindParam(1, $region);
$stmt->bindParam(2, $ngay);
$stmt->execute();
$stmt->bindColumn(3, $out);
$x = $stmt->fetchAll();
return $out; //that's output

工作关键是$stmt->bindColumn(3, $out);希望这对某人有所帮助。

快乐编码。

替换 $stmt = $pdo->prepare('DECLARE @DaySpin datetime EXEC dbo.ResultsByRegionAndDate ?, ?, @DaySpin OUTPUT');

如果希望 sql 将值返回给输出参数,则必须在参数末尾指定 OUTPUT。