1

print結果を返すためにトランザクションステートメントを使用して結果を返すストアドプロシージャがあります。

これまでは、php_mssql拡張子とそのmssql_get_last_message()関数を使用して、返されたテキストを取得していました。

PHP が mssql 拡張機能のサポートを終了したため、拡張機能に戻すことにしましたphp_odbc

私が直面している問題は、を使用して情報を取得できないことodbc_errormsg()です。PHP と ODBC を使用して印刷メッセージを取得する方法はありますか?

と に関する興味深い質問をいくつか見つけましたが、PHP に関連するものはprintありませんでした。odbc

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

このソリューションには制限があります。クエリが表形式の結果とメッセージを返す場合は機能しません。

于 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 に答える