我已经创建了一个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。