1

我有一个存储过程,它使用事务print语句返回其结果以返回其结果。

到目前为止,我使用php_mssql扩展及其mssql_get_last_message()函数来获取返回的文本。

由于 PHP 已经放弃了对 mssql 扩展的支持,我决定退回到该php_odbc扩展。

我面临的问题是我无法使用odbc_errormsg(). 有没有办法使用 PHP 和 ODBC 检索打印消息?

print我发现了一些与and主题有关的有趣问题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
4

2 回答 2

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'];

此解决方案是有限的。当您的查询返回表格结果和消息时,它将不起作用。

于 2013-11-08T13:04:44.217 回答
1

$messageodbc_errmsg()是好的。这意味着没有错误。

请注意,“获取最后一条消息”与“获取错误消息”不同。事实上,这 2 个 MSSQL PHP 驱动程序的工作方式不同。你不能指望他们返回相似的结果。

此外,作为旁注,mssql_*函数在 PHP 5.3 中被删除。改用sqlsrv_*函数(需要从 Microsoft 安装额外的软件)。进一步阅读。

根据文件

返回一个包含最后一条 ODBC 错误消息的字符串,如果没有错误,则返回一个空字符串。

于 2013-11-08T11:28:59.900 回答