2012-04-02 91 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()方法。