【发布时间】:2018-11-27 09:29:37
【问题描述】:
我是 PHP 编程的初学者。
我在 SQL Server 中有一个带有输入、输出和 ReturnValue 参数的 SP,它从示例表中返回数据。
CREATE PROCEDURE [dbo].[sp_PHP]
@in1 int, @in2 int, @out3 int OUTPUT
WITH EXEC AS CALLER
AS
SET @out3 = @in1 * @in2
SELECT * FROM PHP
RETURN @in1 + @in2
这是我的 PHP 代码
<?php
try
{
$conn = new PDO("sqlsrv:Server=xxxxx,1433;Database=xxxxxx", "xx", "xx");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e)
{
die(print_r($e->getMessage()));
}
$query = '{? = CALL sp_PHP(?, ?, ?)}';
$stmt = $conn->prepare($query);
$returnVariable = -1;
$inputVariable1 = 18;
$inputVariable2 = 24;
$outputVariable3 = -1;
$stmt->bindParam(1,$returnVariable, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 100);
$stmt->bindParam(2,$inputVariable1, PDO::PARAM_INT);
$stmt->bindParam(3,$inputVariable2, PDO::PARAM_INT);
$stmt->bindParam(4,$outputVariable3, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 100);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_BOTH);
foreach($results as $row) {
echo $row['PHP_ID'].' '.$row['PHP_Char'].'<br>';
}
echo '<hr>';
echo 'Return value: '.$returnVariable.'<br>';
echo 'Output parameter: '.$outputVariable3.'<br>';
?>
如果我删除 SP 中的行
SELECT * FROM PHP
并且不要使用以下代码读取 PHP 中接收到的数据
$results = $stmt->fetchAll(PDO::FETCH_BOTH);
foreach($results as $row) {
echo $row['PHP_ID'].' '.$row['PHP_Char'].'<br>';
}
我收到了正确的 $returnVariable (42) 和 $outputVariable3 (432) 值。
但是如果我读取(并显示)从 SP 读取的数据,$returnVariable 和 $outputVariable3 等于 -1(分配的值)
我想同时读取输出参数、ReturnValue 和数据。
有可能吗?我哪里错了?
谢谢!!
【问题讨论】:
-
可能已解决更改的连接方法 $conn = sqlsrv_connect($serverName, $connectionInfo)
标签: php sql-server stored-procedures