我在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)。再次,任何建议将不胜感激。感谢