2016-02-25 33 views
0

我已經創建了生產這樣的SQL存儲:laravel 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項目,althought我試過很多方法來獲得存儲產品,但仍然輸出失敗。

$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是空的,我不知道如何從存儲產品的產量。

有沒有辦法得到沒有修改存儲產品的輸出?

請幫

回答

0

經過幾個小時的工作,我發現這種情況下的解決方案,如果任何人有像我一樣的問題可能會用它來解決它。

這裏的問題是我錯了讀取輸出參數的方式,這裏是正確的方法。

$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);希望這有助於某人。

快樂編碼。

0

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

如果你想SQL的值返回給你在參數的結尾處指定輸出的輸出參數。

+0

我也這樣做,但我不知道如何獲得'@ DaySpin'值 – vietnguyen09

+1

我真的不能幫助你laravel,我正在排除SQL錯誤。也許看看這個http://stackoverflow.com/questions/22517903/using-a-stored-procedure-in-laravel-4? – CiucaS

+0

感謝您爲我所做的一切,我找到了解決此問題的解決方案。 – vietnguyen09