アプリケーション全体が Lunix から Windows に移行されるため、既存の yii-Framework アプリケーションは{pdo_,}sqlsrvを使用して SQL-Server バックエンドと通信するように移行する必要があります。
複数の行セットを生成する (不変の) ストアド プロシージャの呼び出しがいくつかあります。従来の mssql-driver は、幸運にも前者を無視しました。sqlsrv を使用すると、関連する/使用可能な行セットsqlsrv_next_result()
を回避してスキップするために、結果ハンドルで使用する必要があります。SQLSTATE[IMSSP]: The active result for the query contains no fields
yii は初めてCDbCommand
なので、拡張機能を十分に低いレベルで導入して、AR などが引き続き機能するようにする方法を見つけられませんでした。したがって、私の現在のソリューションは、フレームワーク/ライブラリコードを直接変更しますが、これは、生産に入ると明らかにオプションではありません.
これは、ライブラリに対する私の変更です (CDbCommand.php#515 から開始):
$retry_hack = false;
do {
try {
$result=$this->_statement->$method();
$retry_hack = false; // won't get here on throw
}
catch (PDOException $e) {
// If we do not have any more rowsets we obviously have
// a proper exception at this point and just re-throw
// it to whomever wants to catch it.
if (!($retry_hack = true === $this->_statement->nextRowset())) {
throw $e;
}
}
} while ($retry_hack);
ここで私の質問: フレームワーク/ライブラリ コードを変更することなく、この動作を十分に低いレベルで導入するにはどうすればよいですか?