2012-04-02 126 views
1

我想弄清楚如何在SQL Server上执行与PHP5.3/PDO_SQLSRV存储过程2008年执行存储过程与PDO_SQLSRV

我发现这个代码:

$sql = new PDO("sqlsrv:server=$server;Database = $database", $user, $password); 
$query = "{? = CALL sp_Login(?, ?)}"; 
$stmt = $sql->prepare($query); 
$returnVariable = 0; 
$inputVariable1 = 'input1'; 
$inputVariable2 = 'input2'; 
$stmt->bindParam(1,$returnVariable,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,100); 
$stmt->bindParam(2,$inputVariable1,PDO::PARAM_STR); 
$stmt->bindParam(3,$inputVariable2,PDO::PARAM_STR); 
$stmt->execute(); 
echo "Return value: ".$returnVariable; 

存储过程有两个输入和一个输出参数,但它看起来什么也没有返回,返回值仍然是0 ..

我可以运行select/insert查询,所以它不是连接。

是否有关于与pdo_sqlsrv存储过程的任何良好的文档?

谢谢!

回答

0

也许这种形式的manual是有帮助的

// Example #4 Calling a stored procedure with an output parameter 

    $stmt = $dbh->prepare("CALL sp_returns_string(?)"); 
    $stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 

    $stmt->execute(); 

    print "procedure returned $return_value\n"; 


    // Example #5 Calling a stored procedure with an input/output parameter 

    $stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)"); 
    $value = 'hello'; 
    $stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

    $stmt->execute(); 

    print "procedure returned $value\n"; 
+0

谢谢,但我尝试过,并没有工作......有没有人做过这件事,并从他的代码库有一个工作的例子? – dacami 2012-04-04 18:35:08

3

搜索的一天后,我发现调用SP的方式... 的问题是,在存储过程运行INSERT查询和我有调用 nextRowset()来获取返回值

http://social.msdn.microsoft.com/Forums/en/sqldriverforphp/thread/55f21fc5-dbc0-4fe4-a4ae-f15905a4293a

$sql = new PDO("sqlsrv:server=$server;Database = $database", $user, $password); 

$input1 = "input1"; 
$input2 = "input2"; 
$return_value = -1; 

$proc = '{? = CALL sp_Name (?, ?) }'; 
$stmt = $sql->prepare($proc); 
$stmt->bindParam(1,$return_value ,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,4); 
$stmt->bindParam(2,$input1,PDO::PARAM_STR); 
$stmt->bindParam(3,$input2,PDO::PARAM_STR); 

$stmt->nextRowset(); //skip INSERT result 

$result = $stmt->fetch(PDO::FETCH_ASSOC); 
/* Display the value of the output parameter */ 
echo "Return value: ".$return_value.'<br>'; 
0

您的商店d proc需要包含“SET NOCOUNT ON”语句,以便Insert语句不需要您调用nextRowset()方法。