2012-10-10 88 views
0

在使用SQLSRV擴展從PHP的documentation for calling a SQL Server stored procedure with parameters,它使用了一個奇怪的語法:PHP SQLSRV參數化存儲過程的T-SQL語法

{call SubtractVacationHours(?, ?)} 

什麼我希望是:

EXEC SubtractVacationHours ?, ?; 

在SQL Server documentation for executing a T-SQL stored procedure它只允許EXEC | EXECUTE作爲命令字。所以我會認爲查詢會導致錯誤。

您肯定可以使用具有指定參數的EXEC SubtractVacationHours SQL(即用問號標記替換值)調用sqlsrv_query

經過對參數化查詢的進一步研究之後,似乎'CALL'來自call it through an ODBC provider

那麼第二個EXEC語法實際上會起作用嗎?或者通過sqlsrv驅動程序參數化存儲過程調用必須使用ODBC CALL語法?

回答

0

我已經測試過我的代碼和兩種形式的語法工作。根據此IIS上Breaking API changes in the February '08博客文章,建議使用雖然CALL語法:

現在,我們可以使用使用SQL Server 2005的驅動程序規範的呼叫語法, 推薦的存儲過程調用存儲過程對於 PHP:

$sql = '{? = CALL CreateProduct (?, ?, ?, ?)}';