簡體   English   中英

如何使用PHP ODBC客戶端捕獲由print語句生成的T-SQL輸出?

[英]How to capture T-SQL output generated by print statement with PHP ODBC client?

我有一個存儲過程正在使用事務處理print語句返回其結果以返回其結果。

到目前為止,我一直使用php_mssql擴展名及其mssql_get_last_message()函數來獲取返回的文本。

由於PHP放棄了對mssql擴展的支持,因此我決定使用php_odbc擴展。

我面臨的問題是我無法使用odbc_errormsg()捕獲信息。 有沒有辦法使用PHP和ODBC檢索打印消息?

我發現了一些有趣的問題,涉及printodbc的主題,但都與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

odbc_errmsg()$message很好。 這意味着沒有錯誤。

請注意,“獲取最后一條消息”與“獲取錯誤消息”不同。 實際上,兩個MSSQL PHP驅動程序的工作方式不同。 您不能期望它們會返回相似的結果。

此外,作為附帶說明,在PHP 5.3中刪除了mssql_*函數。 改用sqlsrv_*函數(需要從Microsoft安裝其他軟件)。 進一步閱讀。

根據文檔

返回包含最后一個ODBC錯誤消息的字符串,如果沒有錯誤則返回空字符串。

我找到了解決方法。 它適用於存儲過程的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'];

該解決方案是有限的。 當查詢返回表格結果和消息時,它將不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM