3

データベース管理システム Sybase ASE は複数の結果セットをサポートしていますが、PHP での Sybase の実装はサポートしていません。この問題に関して報告されたバグがあり、その報告で提供されるパッチもあります (https://bugs.php.net/bug.php?id=48675)。パッチはバージョン 5.2.9 用で、バージョン 5.3.10 に追加しようとしました。ソースは警告やエラーなしでビルドされ、新しい関数 'sybase_next_result()' をテストしても致命的なエラー「Call to undefined function」は発生しません。これは、機能が実装されているが、期待どおりに機能していないことを示唆しています。

構成は次のとおりです。

configure --disable-isapi --enable-debug-pack --without-mssql --without-pdo-mssql --without-pi3web --with-mcrypt=static --disable-static-analyze --enable-cli --with-sybase-ct=%SYBASE%\%SYBASE_OCS%

複数の結果セットがある場合、「sybase: Unexpected results, canceling current in...」という通知が 'sybase_query()' に表示されます。最初の結果セットが取得されます。そして、この通知はパッチがなくても返されます。

複数の結果セットを返すデータベース内のストアド プロシージャの数は膨大であり、'sybase_next_result()' が最適なソリューションです。要するに、PHP 5.3.10 の Sybase の「mssql_next_result()」(http://se2.php.net/manual/en/function.mssql-execute.php) に相当するものを探しています。

注目に値するのは、Sybase 実装の他の部分が適切に配置されており、期待どおりに機能しているように見えることです。

私のテスト環境は WAMP サーバー (Windows 7、Apache 2.21、MySQL 5.5.20、PHP 5.3.10) で、Sybase ASE はバージョン 15.7.0 です。

これを「解決」した人はいますか?

//ジョナスに関して

4

1 に答える 1

1

アップデート:

同僚から、'OutputDebugString()' (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362(v=vs.85).aspx) を使用して DebugView でキャッチするように指示されました。 (http://technet.microsoft.com/en-us/sysinternals/bb896647)。

このことから、'sybase_next_result()' が呼び出されたと言えますが、ブロックは

if (sybase_ptr->active_result_index) {
    ...
}

実行されません。これはおそらく正しいです(私が見ているように)。

retcode = ct_results(sybase_ptr->cmd, &restype);

常に「retcode」を「CS_FAIL」に設定しています。これはおそらく以前の

ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, sybase_link_index, id, "Sybase-Link", le_link, le_plink);

'retcode' が 'CS_FAIL' になるような方法で 'sybase_ptr' を設定します。

于 2012-04-20T13:32:33.547 に答える