使用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调用它们,所以我有点难住。
答
如果存储过程不返回任何东西,你必须使用SET NOCOUNT ON;
你可以阅读更多关于它在这里:
+0
您是对的!我甚至在前一天有过类似的问题,并完全忘记了这是一个可能的解决方案。非常感谢。 –
你看到http://php.net/manual/ EN/pdo.prepared-statements.php? – JimmyB
是;我尝试过绑定参数,但是我得到的错误信息与最后一部分相同,例如'执行的SQL语句是:MYSERVER.My_Database.My_Schema.my_Stored_Procedure ?, ?, ?,?' –