2015-07-03 185 views
2

我無法通過PDO將參數傳遞給SQL Server上的存儲過程。使用PHP PDO將參數傳遞給SQL Server存儲過程

我可以成功地對不需要參數,像這樣簡化版本代碼的程序執行一個查詢:

$dbConnection = Craft::createComponent(array(
    'charset'   => 'utf8', 
    'class'    => 'CDbConnection', 
    'autoConnect'  => true, 
)); 

$dbConnection->connectionString = 'sqlsrv:Server=MYSERVER;Database=My_Database'; 
$dbConnection->username = 'MyUsername'; 
$dbConnection->password = 'MyPasword'; 

$command = $dbConnection->createCommand(
    'MYSERVER.My_Database.My_Schema.my_Stored_Procedure' 
); 

$data = $command->queryAll(); 

這將返回數據的罰款。

但是,如果存儲過程需要參數,我不能解決如何做到這一點。我嘗試過的東西,如更換createCommand行:使用我一直在考慮這四個參數

$command = $dbConnection->createCommand(
    "MYSERVER.My_Database.My_Schema.my_Stored_Procedure 1, 'A Parameter', '', ''" 
); 

,應該工作,但是這讓我:

CDbCommand failed to execute the SQL statement: SQLSTATE[IMSSP]: The active 
result for the query contains no fields.. The SQL statement executed was: 
MYSERVER.My_Database.My_Schema.my_Stored_Procedure 1, 'A Parameter', '', '' 

我不熟悉使用SQL Server存儲過程的語法,不要介意從PHP調用它們,所以我有點難住。

+0

你看到http://php.net/manual/ EN/pdo.prepared-statements.php? – JimmyB

+0

是;我嘗試過綁定參數,但是我得到的錯誤信息與最後一部分相同,例如'執行的SQL語句是:MYSERVER.My_Database.My_Schema.my_Stored_Procedure ?, ?, ?,?' –

回答

1

如果存儲過程不返回任何東西,你必須使用SET NOCOUNT ON;

你可以閱讀更多關於它在這裏:

https://msdn.microsoft.com/en-us/library/ms189837.aspx

+0

您是對的!我甚至在前一天有過類似的問題,並完全忘記了這是一個可能的解決方案。非常感謝。 –

相關問題