使用PHP PDO将参数传递给SQL Server存储过程

问题描述:

我无法通过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 ?, ?, ?,?' –

如果存储过程不返回任何东西,你必须使用SET NOCOUNT ON;

你可以阅读更多关于它在这里:

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

+0

您是对的!我甚至在前一天有过类似的问题,并完全忘记了这是一个可能的解决方案。非常感谢。 –