我有一个存储过程,它使用transact 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
答案 0 :(得分:1)
$message
之前的空odbc_errmsg()
是好的。这意味着没有错误。
请注意“获取最后一条消息”与“获取错误消息”不同。实际上,2 MSSQL PHP驱动程序的工作方式不同。你不能指望他们会得到类似的结果。
此外,作为旁注,在PHP 5.3中删除了mssql_*
函数。请改用sqlsrv_*
函数(需要Microsoft安装其他软件)。阅读further。
返回包含最后一条ODBC错误消息的字符串,如果没有错误,则返回一个空字符串。
答案 1 :(得分:1)
我发现了这个解决方法。它适用于存储过程的return
值,但不适用于print
。由于我的存储过程打印并返回,因此可以从过程中获取结果而无需修改它:
替换旧的5.2 PHP代码:
$query = "exec dbo.PdaBLCreer 12345";
$res = mssql_query($query);
$message = mssql_get_last_message();
使用php_odbc这个PHP 5.4代码:
$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'];
此解决方案有限。当您的查询返回表格结果和消息时,它将不起作用。