我有一个存储过程,该过程使用事务print
语句返回其结果,以返回其结果。
到目前为止,我一直使用php_mssql
扩展名及其mssql_get_last_message()
功能来获取返回的文本。
由于PHP放弃了对mssql扩展的支持,因此我决定退回到该php_odbc
扩展。
我面临的问题是我无法使用捕获信息odbc_errormsg()
。有没有一种方法可以使用PHP和ODBC检索打印消息?
我找到了解决的问题的一些有趣的问题print
和odbc
,但没有涉及到PHP。
带有mssql的PHP代码(有效):
$query = "exec dbo.PdaBLCreer 12345";
$res = mssql_query($query);
$message = mssql_get_last_message();
带有odbc的PHP代码(无效,$ message始终为空):
$query = "exec dbo.PdaBLCreer 12345";
$res = odbc_exec($connection, $query);
$message = odbc_errormsg($connection);
T-SQL存储过程
CREATE PROCEDURE dbo.PdaBLCreer
@iArgument int
AS
BEGIN
...
PRINT @vNr
RETURN @vNr
END
我找到了解决方法。它适用于return
存储过程的值,但不适用于print
。由于我的存储过程可以打印并返回,因此无需修改即可从过程中获取结果:
替换旧的5.2 PHP代码:
$query = "exec dbo.PdaBLCreer 12345";
$res = mssql_query($query);
$message = mssql_get_last_message();
与此PHP 5.4代码一起使用php_odbc:
$query = "DECLARE @return_status int
EXEC @return_status = dbo.PdaBLCreer 12345
SELECT 'ReturnStatus' = @return_status";
$res = odbc_exec($connection, $query);
$line = odbc_fetch_array($res);
$message = $line['ReturnStatus'];
该解决方案是有限的。当查询返回表格结果和消息时,它将不起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句