使用PHP PDO执行输出返回的存储过程

时间:2014-06-13 19:35:44

标签: php sql-server pdo

我在SQL Server 2008 R2中有一个存储过程,如下所示:

CREATE PROC [dbo].[addlotDred] @inlot varchar(10), @inWafer varchar(3) ,@inlayer 
varchar(10), @returned int OUTPUT
AS
BEGIN

SET NOCOUNT ON

DECLARE @lotAdded int

EXEC dbo.addLotPullEdi @lot = @inlot, @wafer = @inWafer,  @layer = @inlayer

SET @lotAdded = (SELECT COUNT(*) FROM dbo.waferEdi WHERE lot = @inlot AND wafer = 
    @inWafer AND layer = @inlayer)

IF @lotAdded > 0
BEGIN
    EXEC dbo.pullNcdd

    EXEC dbo.pullCoordinatesServerInfo

    EXEC dbo.pullSPCComments

    EXEC dbo.updateDate

    EXEC dbo.pullWipComments

    EXEC dbo.pullExperimentComments

    EXEC dbo.pullYodaComments

    EXEC dbo.pullQef

    EXEC dbo.pullDrb

    EXEC dbo.pullTracers

    SET @returned = 1
END
ELSE
BEGIN
    SET @returned = 0
END
END

我希望用PHP执行此SP并使用输出结果反馈给AJAX查询。当我在SSMS中运行SP时,它会执行并返回我期望的值(这已从我原来的帖子中更新)PHP:

try {
    $dbh = new PDO("sqlsrv:Server=(local);Database=dred");
    $dbh->setAttribute( PDO::ATTR_ERRMODE, 
    PDO::ERRMODE_EXCEPTION,PDO::ERRMODE_WARNING);
} catch (PDOException $e) {
    die("Error connecting to the server.");
}

 $sth = $dbh->prepare("DECLARE @returned EXEC dbo.addlotDred ?,?,?,?");

//for testing purpose, these would usually come from AJAX call
$retval = "@returned OUTPUT";
$lot = 'Z12C1111';
$wafer = 'yyy';
$layer = 'xxx';

$sth->bindParam(1,$lot,PDO::PARAM_STR);
$sth->bindParam(2,$wafer,PDO::PARAM_STR);
$sth->bindParam(3,$layer,PDO::PARAM_STR);
$sth->bindParam(4,$retval,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT);

try {
    $sth->execute();
    $results = array();
    do{
        $results[] = $sth->fetchAll();
    } while ($sth->nextRowset());
  }catch (PDOException $e) {
  die("Error adding to the database.");
}

echo $results; 

PHP已经稍微更新到DECLARE @returned并根据我的评论添加PDO :: ERRMODE_WARNING。现在PHP运行但返回一个空数组(在查询中添加和不添加DECLARE @returned)。再次,任何建议将不胜感激。感谢

0 个答案:

没有答案